开发者社区> 问答> 正文

Java-SDK之如何实现上传文件(一)?

在OSS中,用户操作的基本数据单元是文件(Object)。OSS Java SDK提供了丰富的文件上传接口,可以通过以下方式上传文件:

  • 流式上传
  • 文件上传
  • 追加上传
  • 分片上传
  • 断点续传上传

流式上传、文件上传、追加上传的文件(Object)最大不能超过5GB。当文件较大时,请使用分片上传,分片上传文件大小不能超过48.8TB。断点续传上传,支持并发、断点续传、自定义分片大小,断点续传是分片上传封装和加强。文件上传推荐使用断点续传。

简单上传


流式上传、文件上传称为简单上传。流式上传,使用InputStream作为Object数据源;文件上传使用本地文件作为Object数据源。

提示:
  • 简单上传的完整代码请参考:GitHub


流式上传


您可以使用OSSClient.putObject上传您的数据流到OSS。

上传字符串
// endpoint以杭州为例,其它region请按实际情况填写
String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
// 云账号AccessKey有所有API访问权限,建议遵循阿里云安全最佳实践,创建并使用RAM子账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建
String accessKeyId = "<yourAccessKeyId>";
String accessKeySecret = "<yourAccessKeySecret>";
// 创建OSSClient实例
OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
// 上传字符串
String content = "Hello OSS";
ossClient.putObject("<yourBucketName>", "<yourKey>", new ByteArrayInputStream(content.getBytes()));
// 关闭client
ossClient.shutdown();



上传byte数组
// endpoint以杭州为例,其它region请按实际情况填写
String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
// 云账号AccessKey有所有API访问权限,建议遵循阿里云安全最佳实践,创建并使用RAM子账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建
String accessKeyId = "<yourAccessKeyId>";
String accessKeySecret = "<yourAccessKeySecret>";
// 创建OSSClient实例
OSSClient ossClient = new OSSClient(endpoint, accessKeyId,accessKeySecret);
// 上传
byte[] content = "Hello OSS".getBytes();
ossClient.putObject("<yourBucketName>", "<yourKey>", new ByteArrayInputStream(content));
// 关闭client
ossClient.shutdown();



上传网络流
// endpoint以杭州为例,其它region请按实际情况填写
String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
// 云账号AccessKey有所有API访问权限,建议遵循阿里云安全最佳实践,创建并使用RAM子账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建
String accessKeyId = "<yourAccessKeyId>";
String accessKeySecret = "<yourAccessKeySecret>";
// 创建OSSClient实例
OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
// 上传
InputStream inputStream = new URL("https://www.aliyun.com/").openStream();
ossClient.putObject("<yourBucketName>", "<yourKey>", inputStream);
// 关闭client
ossClient.shutdown();



上传文件流
// endpoint以杭州为例,其它region请按实际情况填写
String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
// 云账号AccessKey有所有API访问权限,建议遵循阿里云安全最佳实践,创建并使用RAM子账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建
String accessKeyId = "<yourAccessKeyId>";
String accessKeySecret = "<yourAccessKeySecret>";
// 创建OSSClient实例
OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
// 上传文件流
InputStream inputStream = new FileInputStream("localFile");
ossClient.putObject("<yourBucketName>", "<yourKey>", inputStream);
// 关闭client
ossClient.shutdown();



上传本地文件
// endpoint以杭州为例,其它region请按实际情况填写
String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
// 云账号AccessKey有所有API访问权限,建议遵循阿里云安全最佳实践,创建并使用RAM子账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建
String accessKeyId = "<yourAccessKeyId>";
String accessKeySecret = "<yourAccessKeySecret>";
// 创建OSSClient实例
OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
// 上传文件
ossClient.putObject("<yourBucketName>", "<yourKey>", new File("localFile"));
// 关闭client
ossClient.shutdown();


设置元信息


文件元信息(Object Meta),是对用户上传到OSS的文件的属性描述,分为两种:HTTP标准属性(HTTP Headers)和User Meta(用户自定义元信息)。 文件元信息可以在各种方式上传(流上传、文件上传、追加上传、分片上传、断点续传),或拷贝文件时进行设置。元信息的名称大小写不敏感。更多文件元信息的介绍,请参看 文件元信息

设定Http Header


OSS允许用户自定义Http header。Http header请参考 RFC2616。几个常用的http header说明如下:
名称描述默认值
Content-MD5文件数据校验,设置了该值后OSS会启用文件内容MD5校验,把您提供的MD5与文件的MD5比较,不一致会抛出错误
Content-Type文件的MIME,定义文件的类型及网页编码,决定浏览器将以什么形式、什么编码读取文件。如果用户没有指定则根据Key或文件名的扩展名生成,如果没有扩展名则填默认值application/octet-stream
Content-Disposition指示MINME用户代理如何显示附加的文件,打开或下载,及文件名称
Content-Length上传的文件的长度,超过流/文件的长度会截断,不足为实际值流/文件时间长度
Expires缓存过期时间,OSS未使用,格式是格林威治时间(GMT)
Cache-Control指定该Object被下载时的网页的缓存行为

// endpoint以杭州为例,其它region请按实际情况填写
String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
// 云账号AccessKey有所有API访问权限,建议遵循阿里云安全最佳实践,创建并使用RAM子账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建
String accessKeyId = "<yourAccessKeyId>";
String accessKeySecret = "<yourAccessKeySecret>";
String content = "Hello OSS";
// 创建上传Object的Metadata
ObjectMetadata meta = new ObjectMetadata();
// 设置上传文件长度
meta.setContentLength(content.length());
// 设置上传MD5校验
String md5 = BinaryUtil.toBase64String(BinaryUtil.calculateMd5(content.getBytes()));
meta.setContentMD5(md5);
// 设置上传内容类型
meta.setContentType("text/plain");
// 创建OSSClient实例
OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
// 上传文件
ossClient.putObject("<yourBucketName>", "<yourKey>", new ByteArrayInputStream(content.getBytes()), meta);
// 关闭client
ossClient.shutdown();


提示:
  • ObjectMetadata提供常用的HTTP Header的设置,比如Content-MD5、Content-Type 、 Content-Length、Content-Disposition 、Content-Encoding 、 Expires、x-oss-server-side-encryption等;
  • 使用ObjectMetadata.setHeader(String key, Object value)设置Header。






展开
收起
青衫无名 2017-10-18 10:41:43 3076 0
0 条回答
写回答
取消 提交回答
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载