oss图片上传

1.导包

     <dependency>
            <groupId>com.aliyun.oss</groupId>
            <artifactId>aliyun-sdk-oss</artifactId>
            <version>3.10.2</version>
        </dependency>

2.工具类

package com.dlb.utils;

import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.model.ObjectMetadata;
import lombok.Data;
import org.springframework.web.multipart.MultipartFile;

import java.io.*;
import java.net.URL;
import java.util.Date;
//图片上传
@Data
public class OSSClientUtil {
    // yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
    private  String endpoint = "oss-cn-shanghai.aliyuncs.com";
    // 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
    private String accessKeyId = "XXXXXXXXX";
    private String accessKeySecret = "XXXXXXX";
    // 填写Bucket名称。
    private String bucketName = "admin-dlb-XXXXX";
    //文件存储目录
    private String fileDir = "data/";

    private OSS ossClient = null;

    public OSSClientUtil(){
        ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
    }

    /**
     * 初始化
     */
    public void init() {
        ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
    }

    /**
     * 销毁
     */
    public void destory() {
        ossClient.shutdown();
    }
    /*
    * 文件源
    * 文件名唯一否则上传失效!例如:asd.jpg
    * */
    public String uploadOss(MultipartFile file, String fileName) {
        //输入流
        InputStream is = null;
        try{
            is = file.getInputStream();
            //文件类型
            ObjectMetadata metadata = getMetadata(is, fileName);
            //上传
            ossClient.putObject(bucketName,fileName,is,metadata);

            String url = getUrl(fileDir + "");
            System.err.println("url:****" + url);
            //拼接路径
            String h = "https://"+bucketName+"."+endpoint+"/"+fileName;
            System.err.println("拼接:%%%%%%"+h);
            destory();
            return h;

        }catch (Exception e){
            e.printStackTrace();
            return null;
        }finally {
            if (is!=null){
                try {
                    is.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    /**
     * 设置过期时间  设置上传的目录key
     */
    public String getUrl(String path) {
        // 设置URL过期时间为10年  3600l* 1000*24*365*10
        Date expiration = new Date(new Date().getTime() + 3600l * 1000 * 24 * 365 * 10);
        // 生成URL
        URL url = ossClient.generatePresignedUrl(bucketName, path, expiration);
        if (url != null) {
            return url.toString();
        }
        return null;
    }
    /**
     * 要上传的文件类型
     * ---->需要判断文件后缀名
     */
    public ObjectMetadata getMetadata(InputStream fis,String fileName) throws IOException {
        ObjectMetadata metadata = new ObjectMetadata();
        //这里需要判断文件后缀名
        metadata.setContentType(getContentType(fileName));
        metadata.setContentLength(fis.available());
        metadata.setCacheControl("no-cache");
        metadata.setHeader("Pragma", "no-cache");
        metadata.setContentDisposition("inline;filename=" + fileName);
        return metadata;
    }
    /**
    * 判断要上传文件的后缀名
    */
    public static String getContentType(String fileName) {
        String filenameExtension = fileName.substring(fileName.lastIndexOf("."));
        if (filenameExtension.equalsIgnoreCase(".bmp")) {
            return "image/bmp";
        }
        if (filenameExtension.equalsIgnoreCase(".gif")) {
            return "image/gif";
        }
        if (filenameExtension.equalsIgnoreCase(".jpeg") ||
                filenameExtension.equalsIgnoreCase(".jpg") ||
                filenameExtension.equalsIgnoreCase(".png")) {
            return "image/jpeg";
        }
        if (filenameExtension.equalsIgnoreCase(".html")) {
            return "text/html";
        }
        if (filenameExtension.equalsIgnoreCase(".txt")) {
            return "text/plain";
        }
        if (filenameExtension.equalsIgnoreCase(".vsd")) {
            return "application/vnd.visio";
        }
        if (filenameExtension.equalsIgnoreCase(".pptx") ||
                filenameExtension.equalsIgnoreCase(".ppt")) {
            return "application/vnd.ms-powerpoint";
        }
        if (filenameExtension.equalsIgnoreCase(".docx") ||
                filenameExtension.equalsIgnoreCase(".doc")) {
            return "application/msword";
        }
        if (filenameExtension.equalsIgnoreCase(".xml")) {
            return "text/xml";
        }
        return "image/jpeg";
    }
    /*
    //       // 将图片缩放为固定宽高100 px后,再旋转90°。
//        //String style = "image/resize,m_fixed,w_100,h_100/rotate,90";
//        // 指定签名URL过期时间为10分钟。
//        Date expiration = new Date(new Date().getTime() + 1000 * 60 * 10 );
//        GeneratePresignedUrlRequest req = new GeneratePresignedUrlRequest(
//                bucketName, objectName, HttpMethod.GET);
//        req.setExpiration(expiration);
//       // req.setProcess(style);
//        URL signedUrl = ossClient.generatePresignedUrl(req);
//        System.out.println(signedUrl);

        // 关闭OSSClient。
        ossClient.shutdown();
    * */

}

3.服务调用

@RequestMapping("/xxx")
    public String addCar(MultipartFile file) {//图片名
        String fileName = System.currentTimeMillis()+file.getOriginalFilename();
        /**
        //图片保存到指定地方
         //HttpServletRequest request
         //项目路径
        String realPath = request.getServletContext().getRealPath("/upload/");
        String path = "E:\\a\\";//本地磁盘路径
        //开始保存本地 需要抛异常
        file.transferTo(new File(realPath+fileName));*///上传到oss
        OSSClientUtil ossClientUtil = new OSSClientUtil();
        ossClientUtil.uploadOss(file,fileName);
        System.err.println("照片上传完毕");return "xxxxxx";
    }
原文地址:https://www.cnblogs.com/9080dlb/p/15713018.html