使用签名链接的JavaS3大型文件上载
我正在尝试使用签名链接将一个非常大的文件(超过10G)上传到S3。链接是从服务器获取的,因此我没有AWS凭据或bucket等。因为文件大于5GB,所以我唯一的方法是多部分上传。
我的代码类似于:
RequestBuilder request = RequestBuilder.post(uri);
request.addHeader("x-amz-server-side-encryption", "AES256");
request.addHeader("Content-Type", ct);
request.addHeader("Content-MD5", md5);
MultipartEntityBuilder entitybuilder = MultipartEntityBuilder.create();
entitybuilder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
entitybuilder.addBinaryBody("file", file);
HttpEntity mutiPartHttpEntity = entitybuilder.build();
request.setEntity(mutiPartHttpEntity);
HttpClient client = HttpClientBuilder.create().build();
HttpResponse response = client.execute(request.build());
String responseStr = EntityUtils.toString(response.getEntity());
这在以下情况下失败:
Caused by: java.net.SocketException: Connection reset
at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:115)
at java.net.SocketOutputStream.write(SocketOutputStream.java:155)
at sun.security.ssl.OutputRecord.writeBuffer(OutputRecord.java:431)
我猜失败是因为AWS允许每个连接最多100个请求,这会保持活动并尝试在单个连接上上载所有内容。有没有办法设置每个部分的大小和/或使Apache HTTP客户端不保持连接打开
我不必使用Apache HTTP客户端。任何上传的方式都是可以接受的,所以我也查看了AmazonS3客户端,但是我能找到的所有examples都有AWS凭据。如果我有签名链接,有没有办法使用AmazonS3进行上传
共 (0) 个答案