今天用oss阿里云完成上传文件操作时遇到一个问题,文件上传到阿里云服务器上后会返回一个url路径,但是通过url路径下载得到是md5加密后的文件名
后查阿里云的sdk文档发现可以通过设置请求头的方式来设置下载文件名:
具体代码如下:
看的时候一定要仔细!!!!!!!!!
-
// 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");
==============================================
解决问题的核心:
//获取原文件名
String filename = file.getOriginalName();
//设置文件上传时的请求头信息,这样上传返回文件存储的url路径,我们通过url路径直接下载就可以得到源文件名而不是加密的随机码。
meta.setContentDisposition("attachment;filename=\""+filename+"\"");
==============================================
-
-
// 创建OSSClient实例
-
OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
-
-
// 上传文件
-
ossClient.putObject("<yourBucketName>", "<yourKey>", new ByteArrayInputStream(content.getBytes()), meta);
-
-
// 关闭client
-
ossClient.shutdown();