阿里雲OSS封裝—上傳文件工具+調用方法

上傳工具類

<!-- 阿里雲OSS-->
        <!-- aliyun oss -->
        <dependency>
            <groupId>com.aliyun.oss</groupId>
            <artifactId>aliyun-sdk-oss</artifactId>
            <version>2.2.1</version>
        </dependency>

import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.Date;
import com.aliyun.oss.OSSClient;
import com.aliyun.oss.model.ObjectMetadata;
import io.lettuce.core.ScriptOutputType;

public class PictureUploadUtils {
    private static String endpoint = "https://oss-cn-節點.com";
    private static String accessKeyId = "***";
    private static String accessKeySecret = "***";
    private static String bucketName = "空間名";
    private static OSSClient ossClient;

    /** 上傳文件到阿里雲,並生成url
     * @param filedir (key)文件名(不包括後綴)
     * @param in 	文件字節流
     * @param suffix 文件後綴名
     * @return String 生成的文件url
     */
    public static String UploadToAliyun(String filedir, InputStream in,String suffix) {
        System.out.println("------------>文件名稱爲:  " + filedir + "." + suffix);
        ossClient  = new OSSClient(endpoint, accessKeyId, accessKeySecret);
        URL url = null;
        try {
            // 創建上傳Object的Metadata
            ObjectMetadata objectMetadata = new ObjectMetadata();
            objectMetadata.setContentLength(in.available());
            objectMetadata.setCacheControl("no-cache");//設置Cache-Control請求頭,表示用戶指定的HTTP請求/回覆鏈的緩存行爲:不經過本地緩存
            objectMetadata.setHeader("Pragma", "no-cache");//設置頁面不緩存
            objectMetadata.setContentType(getcontentType(suffix));
            objectMetadata.setContentDisposition("inline;filename=" + filedir + "." + suffix);
            // 上傳文件
            ossClient.putObject(bucketName, filedir, in, objectMetadata);

            Date expiration = null;//過期時間
            //String[] split = filedir.split("/");
            //if(split[0].equals("circle")){// 朋友圈圖片,設置URL過期時間爲3個月
            //    expiration = new Date(new Date().getTime() + 3600l * 1000 * 24 * 90);
            //}else{// 頭像,設置URL過期時間爲10年
            //    System.out.println("12313123123123123");
                expiration = new Date(new Date().getTime() + 3600l * 1000 * 24 * 365 * 10);
            //}
            // 生成URL
            System.out.println(expiration);
            url = ossClient.generatePresignedUrl(bucketName, filedir, expiration);

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            ossClient.shutdown();
            try {
                if (in != null) {
                    in.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
            System.out.println("快結束了");
        }
        return url.toString();
    }

    /**刪除圖片
     * @param key
     */
    public static void deletePicture(String key){
        ossClient  = new OSSClient(endpoint, accessKeyId, accessKeySecret);
        ossClient.deleteObject(bucketName, key);
        ossClient.shutdown();
    }

    /**
     * Description: 判斷OSS服務文件上傳時文件的contentType
     * @param suffix 文件後綴
     * @return String HTTP Content-type
     */
    public static String getcontentType(String suffix) {
        System.out.println("------------>文件格式爲:  " + suffix);
        if (suffix.equalsIgnoreCase("bmp")) {
            return "image/bmp";
        } else if (suffix.equalsIgnoreCase("gif")) {
            return "image/gif";
        } else if (suffix.equalsIgnoreCase("jpeg") || suffix.equalsIgnoreCase("jpg")) {
            return "image/jpeg";
        } else if (suffix.equalsIgnoreCase("png")) {
            return "image/png";
        } else if (suffix.equalsIgnoreCase("html")) {
            return "text/html";
        } else if (suffix.equalsIgnoreCase("txt")) {
            return "text/plain";
        } else if (suffix.equalsIgnoreCase("vsd")) {
            return "application/vnd.visio";
        } else if (suffix.equalsIgnoreCase("pptx") || suffix.equalsIgnoreCase("ppt")) {
            return "application/vnd.ms-powerpoint";
        } else if (suffix.equalsIgnoreCase("docx") || suffix.equalsIgnoreCase("doc")) {
            return "application/msword";
        } else if (suffix.equalsIgnoreCase("xml")) {
            return "text/xml";
        } else if (suffix.equalsIgnoreCase("mp3")) {
            return "audio/mp3";
        } else if (suffix.equalsIgnoreCase("amr")) {
            return "audio/amr";
        } else {
            return "text/plain";
        }
    }
}

調用工具

	/**
     * 單
     */
    @PostMapping(value = "/file")
    public Result file(@RequestParam("file") MultipartFile file) throws  Exception{
        String suffix = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".") + 1);
        String name=System.currentTimeMillis()+"";
        //調用方法傳 文件名,流,後綴   我都寫好了,可直接使用
        //返回文件的url
        String x= PictureUploadUtils.UploadToAliyun(name,file.getInputStream(),suffix);
        return Result.ok("filePath", x);
    }
    /**
     * 多
     */
    @PostMapping(value = "/uploadfiles")
    public  Result fileS(HttpServletRequest request) throws  Exception{
        List successUploadFiles=new ArrayList(); //返回上傳成功的文件名list給前端
        List<MultipartFile> files = ((MultipartHttpServletRequest) request).getFiles("file");  //創建一個list接受前端發送的文件
        List<String> list=new ArrayList<>();
        for (MultipartFile m:files) { //用foreach處理list列表中的file
            String suffix = m.getOriginalFilename().substring(m.getOriginalFilename().lastIndexOf(".") + 1);
            String name=System.currentTimeMillis()+"";
            list.add(PictureUploadUtils.UploadToAliyun(name,m.getInputStream(),suffix));
        }
        return Result.ok("filePath",list);//返回list
    }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章