阿里云OSS上传、下载和生成临时url授权第三方上传操作

阿里云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());

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值