Skip to content
大纲

下载文件

FOS Java SDK提供了丰富的文件下载接口,用户可以通过以下方式从FOS中下载文件:

  • 简单流式下载
  • 下载到本地文件
  • 范围下载

简单流式下载

用户可以通过如下代码将Object读取到一个流中:

java
public void getObject(FosClient client, String bucketName, String objectKey)
    throws IOException {

    // 获取Object,返回结果为FosObject对象
    FosObject object = client.getObject(bucketName, objectKey);
    // 获取ObjectMeta
    ObjectMetadata meta = object.getObjectMetadata();
    // 获取Object的输入流
    InputStream objectContent = object.getObjectContent();
    // 处理Object
    ...

    // 关闭流
    objectContent.close();
}

注意:

  1. FosObject中包含了Object的各种信息,包含Object所在的Bucket、Object的名称、MetaData以及一个输入流,用户可以通过操作输入流将Object的内容读取到文件或者内存中。
  2. ObjectMetadata中包含了Object上传时定义的ETag,Http Header以及自定义的元数据。
  3. 通过FosObject的getObjectContent方法,还可以获取返回Object的输入流,用户可以读取这个输入流来对Object的内容进行操作。

直接下载Object到文件

用户可以通过如下代码直接将Object下载到指定文件:

java
// 新建GetObjectRequest
GetObjectRequest getObjectRequest = new GetObjectRequest(bucketName, objectKey);
// 下载Object到文件
ObjectMetadata objectMetadata = client.getObject(getObjectRequest, new File("/path/to/file","filename"));

当使用上面方法将Object直接下载到文件时,方法返回ObjectMetadata对象。

范围下载

为了实现更多的功能,可以通过使用GetObjectRequest来指定下载范围,实现更精细化地获取Object。如果指定的下载范围是0 - 100,则返回第0到第100个字节的数据,包括第100个,共101字节的数据,即[0, 100]。

java
// 新建GetObjectRequest
GetObjectRequest getObjectRequest = new GetObjectRequest(bucketName, objectKey);
// 获取0~100字节范围内的数据
getObjectRequest.setRange(0, 100);
// 获取Object,返回结果为FosObject对象
FosObject object = client.getObject(getObjectRequest);

通过getObjectRequest的setRange方法可以设置返回Object的范围。用户也可以用此功能实现文件的分段下载和断点续传。

其他使用方法

只获取ObjectMetadata

通过 getObjectMetadata 方法可以只获取ObjectMetadata而不获取Object的实体。如下代码所示:

java
ObjectMetadata objectMetadata = client.getObjectMetadata(bucketName, objectKey);

getObjectMetadata方法返回的解析类中可供调用的参数有:

参数说明
contentTypeObject的类型
contentLengthObject的大小
contentMd5Object的MD5
etagObject的HTTP协议实体标签
storageClassObject的存储类型
userMetadata如果在PutObject指定了userMetadata自定义meta,则返回此项
xIcCrc如果在PutObject指定了object的CRC值(循环冗余校验码),则返回此项