下载对象
您可以使用 getObject 接口下载对象,以下代码展示如何下载一个对象:
String bucketName = "<your-bucket-name>";
String objectKey = "<your-object-key>";
String localPath = "<your-local-path>"; // 本地存储路径
try {
GetObjectRequest getObjectRequest = new GetObjectRequest(bucketName, objectKey);
S3Object o = s3.getObject(getObjectRequest);
S3ObjectInputStream s3is = o.getObjectContent();
FileOutputStream fos = new FileOutputStream(new File(localPath));
byte[] read_buf = new byte[1024];
int read_len = 0;
while ((read_len = s3is.read(read_buf)) > 0) {
fos.write(read_buf, 0, read_len);
}
s3is.close();
fos.close();
}
catch (AmazonServiceException e) {
System.err.println(e.getErrorMessage());
} catch (FileNotFoundException e) {
System.err.println(e.getMessage());
} catch (IOException e) {
System.err.println(e.getMessage());
}
下载对象时,可以重写部分HTTP/HTTPS响应头信息。可重写的响应头信息见下表:
Java-sdk 方法 | 作用 |
---|---|
ResponseHeaderOverrides.setContentType | 重写HTTP/HTTPS响应中的 Content-Type |
ResponseHeaderOverrides.setContentLanguage | 重写HTTP/HTTPS响应中的 Content-Language |
ResponseHeaderOverrides.setExpires | 重写HTTP/HTTPS响应中的 Expires |
ResponseHeaderOverrides.setCacheControl | 重写HTTP/HTTPS响应中的 Cache-Control |
ResponseHeaderOverrides.setContentDisposition | 重写HTTP/HTTPS响应中的 Content-Disposition |
ResponseHeaderOverrides.setContentEncoding | 重写HTTP/HTTPS响应中的 Content-Encoding |
以下代码展示如何在下载Object时设置 GetObjectRequest ,重写响应头信息:
GetObjectRequest getObjectRequest = new GetObjectRequest(bucketName, objectKey);
//设置Response响应头信息 Content-Type 为 video/mp4
ResponseHeaderOverrides responseHeaderOverrides = new ResponseHeaderOverrides();
responseHeaderOverrides.setContentType("video/mp4");
getObjectRequest.setResponseHeaders(responseHeaderOverrides);
S3Object o = s3.getObject(getObjectRequest);
下载文件时,可以指定一个或者多个限定条件,满足条件时才下载对象,不满足时则报错,不下载对象。可以使用的限定条件如下:
Java-sdk 方法 | 作用 |
---|---|
GetObjectRequest.setModifiedSinceConstraint | 如果指定的时间早于实际修改时间,则正常传送。否则返回错误。 |
GetObjectRequest.setUnmodifiedSinceConstraint | 如果传入参数中的时间等于或者晚于文件实际修改时间,则正常传输文件;否则返回错误。 |
GetObjectRequest.setMatchingETagConstraints | 如果传入的ETag和Object的 ETag匹配,则正常传输;否则返回错误。 |
GetObjectRequest.setNonmatchingETagConstraints | 如果传入的ETag值和Object的ETag不匹配,则正常传输;否则返回错误。 |
GetObjectRequest getObjectRequest = new GetObjectRequest(bucketName, objectKey);
//通过Date类设置一个时间
Date date = new Date();
//下载date早于实际修改时间的Object
getObjectRequest.setModifiedSinceConstraint(date);
S3Object o = s3.getObject(getObjectRequest);