阿里云OSS的基础配置
private static String accessKeyId = "";
private static String accessKeySecret = "";
private static String bucketName = "";
private static String endpoint = "https://oss-cn-shanghai.aliyuncs.com";//上海
private static String folder = "";//目录
初始化:OSSClient client = new OSSClient(endpoint, accessKeyId, accessKeySecret);
jar包:"com.aliyun.oss:aliyun-sdk-oss:2.8.3",
1、文件上传
......
byte[] bytes =
ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
String fileName = "file.jpg";
PutObjectResult putObjectResult = ossClient.putObject(bucketName,folder+fileName,bais);
putObjectResult.getETag();上传成功后会返回MD5值
2、生成临时授权的URL,第三方可以用这个URL进行上传操作
Date expiration = new Date(System.currentTimeMillis() + 3600L * 1000 * 24 * 180);//设置该URL的有效期180天
GeneratePresignedUrlRequest request =
new GeneratePresignedUrlRequest(bucketName, folder+urlRequest.getFileName(), HttpMethod.PUT);//设置为这个URL只支持PUT操作
request.setExpiration(expiration);
request.setContentType("application/octet-stream");
URL url = ossClient.generatePresignedUrl(request);
说起ContentType,这个我是爬了好久的坑,按照官网的提供的ContentType对应值(https://helpcdn.aliyun.com/knowledge_detail/39522.html),
我试了一下(video/mpeg4)这个类型,可以上传成功,也可以下载成功,就是没法播放,总是提醒文件损坏了。
最后改成(application/octet-stream),既可以上传成功,下载下来也可以播放,试了一下图片,依然正常,索性就用这个了,感觉这个类型是万能的
3、根据生成的临时授权URL进行文件上传
Request中video的类型为:MultipartFile
HttpClient httpClient = HttpClients.createDefault();
HttpResponse response;
HttpPut put = new HttpPut(ossRequest.getUrl());
HttpEntity reqEntity = EntityBuilder.create().setBinary(request.getVideo().getBytes()).build();
put.setEntity(reqEntity);
response = httpClient.execute(put);
HttpEntity resEntity=response.getEntity();
PS:当时按照网上教程给HttpPut也设置ContentType:put.addHeader("Content-Type", "application/octet-stream");
上传成功下载下来就是没法播放,去掉之后就好了,也不知道是我添加姿势不对,还是什么原因
4、生成下载链接
Date expiration = new Date(System.currentTimeMillis() + 3600L * 1000 * 24 * 180);
URL url = ossClient.generatePresignedUrl(bucketName, folder+urlRequest.getFileName(), expiration);
5、获取bucket下某个目录下的所有文件的key
ObjectListing objectListing = ossClient.listObjects(bucketName,folder);
List<OSSObjectSummary> ossList = objectListing.getObjectSummaries();
List<String> list = new ArrayList<>();
for (OSSObjectSummary s : ossList) {
list.add(s.getKey());
}
6、删除文件
ossClient.deleteObject(bucketName, folder+fileName());