java 使用AI Azure视频索引器我正在获取URL_UNREACHABLE,但可以从其他网站访问该URL

kmynzznz  于 2023-04-28  发布在  Java
关注(0)|答案(1)|浏览(133)

我已经实现了与Azure Au Indexer的集成。对索引的POST调用返回URL_UNREACHABLE,但该URL可以从例如Web浏览器访问。下载服务器上尚未定义身份验证。

org.springframework.web.client.HttpClientErrorException$BadRequest: 400 Bad Request: "{"ErrorType":"URL_UNREACHABLE","Message":"Url 'https://server/api/v1/download/3911ed0c-16eb-4ad8-a282-244006f05346' is unreachable. Trace id: '06e23f6f-d3d7-4bd1-a750-51877b30e8e9'."}"

我使用Java SpringBoot来为这段代码的请求提供服务

@GetMapping("download/{uuid}")
public ResponseEntity<StreamingResponseBody> download(@PathVariable String uuid) throws Exception {

    DownloadResult result = teService.download(uuid);

    return ResponseEntity.ok()
            .header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + uuid + "\"")
            .header(HttpHeaders.CONTENT_LENGTH, result.getObjectSize().toString())
            .header(HttpHeaders.CONTENT_TYPE, result.getMimeType())
            .header(HttpHeaders.PRAGMA, "public")
            .header(HttpHeaders.EXPIRES, "-1")
            .header(HttpHeaders.CACHE_CONTROL, "public, must-revalidate, post-check=0, pre-check=0")
            .body(result.getResponseBody());
}

我试图改变头返回它作为一个内联流没有成功。我期待Azure AI索引器可以像其他网站一样下载视频

mzmfm0qo

mzmfm0qo1#

  • 检查URL是否可从与Azure视频索引器服务相同的网络访问。您可以尝试从同一网络上的其他计算机访问该URL,以查看是否可以访问。
  • URL可能被防火墙或网络限制阻止,从而阻止从某些IP地址或网络访问。确保允许运行索引器的服务器的IP地址访问URL。
  • 我已经安装了Azure Video Indexer,并在本地录制了一个视频,以索引文件并下载。

  • 下面是Sping Boot 控制器,它使用Azure Video Indexer SDK来索引视频和检索视频数据。
@RestController
public class VideoController {
    private static final String FILE_DIRECTORY = "/path/to/videos/";

    @Autowired
    private AzureVideoIndexerService videoIndexerService;

    @GetMapping(value = "/download/{uuid}", produces = MediaType.APPLICATION_OCTET_STREAM_VALUE)
    public ResponseEntity<byte[]> downloadVideo(@PathVariable String uuid) {
        try {
            File file = new File(FILE_DIRECTORY + uuid + ".mp4");
            byte[] videoBytes = Files.readAllBytes(file.toPath());
            HttpHeaders headers = new HttpHeaders();
            headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
            headers.setContentLength(videoBytes.length);
            headers.setContentDisposition(ContentDisposition.attachment()
                .filename(uuid + ".mp4")
                .build());
            return new ResponseEntity<>(videoBytes, headers, HttpStatus.OK);
        } catch (IOException e) {
            return new ResponseEntity<>(HttpStatus.NOT_FOUND);
        }
    }

    @PostMapping(value = "/index/{uuid}")
    public ResponseEntity<String> indexVideo(@PathVariable String uuid) {
        try {
            String videoUrl = "http://localhost:8080/download/" + uuid;
            String indexId = videoIndexerService.indexVideo(videoUrl);
            return new ResponseEntity<>("Video indexing started with index id " + indexId, HttpStatus.OK);
        } catch (Exception e) {
            return new ResponseEntity<>("Failed to start video indexing: " + e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
        }
    }
}

已索引到Azure AI Indexer中的.mp4文件。

downloadVideo方法中的uuid参数对应于要下载的视频文件的UUID或文件ID。下面是作为下载文件的请求的示例URL。

  • Azure视频索引器运行的网络环境可能与您用于访问URL的网络环境不同。这可能导致不同的网络配置、防火墙、代理等。,这可能会阻止从Azure视频索引器访问URL。

相关问题