-1

如何为 egnyte 分块上传和发送到 egnyte api 的 rest 服务编写 java 代码。

https://developers.egnyte.com/docs/read/File_System_Management_API_Documentation#Chunked-Upload

long size = f.getTotalSpace();
        int sizeOfFiles = 1024 * 1024;// 1MB
        byte[] buffer = new byte[sizeOfFiles];
        ResponseEntity<String> responseEntity = null;
        String fileName = f.getName();
        String url = DOWNLOAD_OR_UPLOAD + "-chunked" + egnyteSourcePath + f.getName();
        HttpHeaders headers = buildEgnyteEntity();
        HttpEntity entity = new HttpEntity<>(headers);
        //try-with-resources to ensure closing stream
        try (FileInputStream fis = new FileInputStream(f);
             BufferedInputStream bis = new BufferedInputStream(fis)) {

            int bytesAmount = 0;
            while ((bytesAmount = bis.read(buffer)) > 0) {
                //write each chunk of data into separate file with different number in name
                String filePartName = String.format("%s.%03d", fileName, partCounter++);
                File newFile = new File(f.getParent(), filePartName);
                responseEntity = restTemplate.exchange(url, HttpMethod.POST, entity, String.class);

            }
        }
        return responseEntity;
4

1 回答 1

0

我认为您的代码中缺少一些东西。

首先是您没有指定所需的标题。您应该为X-Egnyte-Chunk-Num提供带有 int 值的块编号,从 1 开始。在X-Egnyte-Chunk-Sha512-Checksum标头中,您应该提供 SHA512 校验和。

第二件事是第一个请求会在X-Egnyte-Upload-Id的响应标头中为您提供UploadId。您需要在第二个和后续请求中将其指定为标头。

第三件事是我没有看到你在请求中使用你的bytesAmount。我不确定你是否提供了数据。

我不是 Java 人,更像是 C# 人,但我在我的博客上写了一篇文章如何使用 Egnyte API 上传和下载大文件:http: //www.michalbialecki.com/2018/02/11 /sending-receiving-big-files-using-egnyte-api-nuget-package/。这可以让您了解如何构建发送循环。

希望有帮助。

于 2018-02-12T06:05:59.393 回答