阿里云oss上传下载删除(亲测好用)

package com.hez.platform.admin.config.upload;

import com.aliyun.oss.HttpMethod;
import com.aliyun.oss.OSSClient;
import com.aliyun.oss.model.GeneratePresignedUrlRequest;
import com.aliyun.oss.model.OSSObject;
import com.aliyun.oss.model.PutObjectResult;
import org.springframework.stereotype.Component;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.Date;

@Component
public class AliyunOSSUtils {



    public final static String ENDPOINT = "oss-cn-zhangjiakou.aliyuncs.com";//地址
    public final static String ACCESS_KEY_ID = "LTAI4G9Zu76XHPyuGiEYyPbj";   //阿里云密钥 在密钥管理中。//假的id,只参考长度和类型
    public final static String ACCESS_KEY_SECRET = "cECnINfI4f8vzsxtORoUjz9T25XOAz";//阿里云密钥 在密钥管理中。//假的id,只参考长度和类型
    public final static String BUCKET_NAME = "tbfwq";   //平台文件夹地址

    /**
     * 开启oss client
     *
     * @return
     */
    public static OSSClient getOSSClients() {
        OSSClient ossClient = new OSSClient(ENDPOINT, ACCESS_KEY_ID, ACCESS_KEY_SECRET);
        return ossClient;
    }

    /**
     * 关闭oss client
     *
     * @param ossClient
     */
    public static void closeOSSClients(OSSClient ossClient) {
        ossClient.shutdown();
    }

    /**
     * 上传文件到oss
     */
    public static String upload(InputStream inputStream, String filename) {
        OSSClient ossClient = getOSSClients();
        PutObjectResult result = ossClient.putObject(BUCKET_NAME, filename, inputStream);
        String etag = result.getETag();
        System.out.println(etag);
        // 设置URL过期时间为10年 3600l* 1000*24*365*10
        Date expiration = new Date(System.currentTimeMillis() + 3600L * 1000 * 24 * 365 * 10);
        GeneratePresignedUrlRequest request = new GeneratePresignedUrlRequest(BUCKET_NAME, filename, HttpMethod.GET);
        request.setExpiration(expiration);
        // 获取URL(HTTP GET请求)。
        URL signedUrl = ossClient.generatePresignedUrl(request);
        // 文件路径,放到浏览器可直接下载
        String url = signedUrl.getHost() + signedUrl.getPath();
        closeOSSClients(ossClient);
        return url;

    }

    /**
     * 下载文件(返回流) filename 需要下载的文件名称
     */
    public static InputStream downloads(String filename) {
        OSSClient ossClient = getOSSClients();
        InputStream content = null;
        try {
            //OSSObject ossObj = ossClient.getObject(new GetObjectRequest(BUCKET_NAME, filename));
            //文件如果在子文件夹下,key需要带上文件夹,例如2020/08/14/1234.jpg
            OSSObject ossObj = ossClient.getObject(BUCKET_NAME, "2020/08/14/1234.jpg");
            content = ossObj.getObjectContent();
            return content;
        } catch (Exception e) {
            e.printStackTrace();
            throw e;
        }finally {
            closeOSSClients(ossClient);
        }


    }

    /**
     * 删除文件
     */
    public static void delete(String filename) {
        OSSClient ossClient = getOSSClients();
        ossClient.deleteObject(BUCKET_NAME, filename);
        closeOSSClients(ossClient);
    }

    public static void main(String[] args) throws IOException {
        //上传文件,传入文件流
//		File file = new File("C:\\Users\\admin\\Desktop\\123.jpg");
//		InputStream is = new FileInputStream(file);
//		upload(is,"12345");
        //删除文件,传入文件名称,不要后缀
//		delete("12345");
        //下载文件,传入文件名称,不要后缀
        InputStream content = downloads("12345");
        int index;
        byte[] bytes = new byte[1024];
        //写入到某盘下,自定义名字,
        //这里注意,如果写成new FileOutputStream("E:/")这样也会报key不存在,这是个坑。之前测下载时一直报错key不存在。找了一小天才找到这里不给个写入文件的名字也会报key不存在。
        FileOutputStream downloadFile = new FileOutputStream("E:/12345.jpg");
        while ((index = content.read(bytes)) != -1) {
            downloadFile.write(bytes, 0, index);
            downloadFile.flush();
        }
        downloadFile.close();
        content.close();


//		InputStream in = download("2ed4cb7216744f84a0269b842455fd37.zip");
//		System.out.println(in.available());
    }

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值