国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

SpringBoot+Vue實現(xiàn)阿里云OSS服務器簽名直傳并且返回回調(diào)數(shù)據(jù)

這篇具有很好參考價值的文章主要介紹了SpringBoot+Vue實現(xiàn)阿里云OSS服務器簽名直傳并且返回回調(diào)數(shù)據(jù)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

vue

<template>
<el-upload
    class="upload-demo"
    :action="objectData.host"
    :before-upload="beforeUpload"
    accept=""
    :multiple="false"
    :on-exceed="handleExceed"
    :on-success="handleSuccess"
    :file-list="fileList"
    :on-error="handleError"
    :data="objectData"
    :show-file-list="false">
    <el-button size="small" type="primary">點擊上傳</el-button>
</el-upload>
</template>

<script>
export default {
  data() {
    return {
      fileList: [],
      objectData: {
          OSSAccessKeyId: '',
          policy: '',
          Signature: '',
          callback: '',
          key: '',
          host: '',
          dir: ''
      },
    };
  },
  methods: {
        beforeUpload(file) {
            const extensionLimits = {
                video: {extensions: ["mp4", "flv"], maxSize: 300},
                documents: {
                    extensions: ["doc", "docx", "xls", "xlsx", "ppt", "pptx", "pdf", "rar", "zip"],
                    maxSize: 30
                },
                images: {extensions: ["jpg", "png", "gif", "jpeg"], maxSize: 30},
                audio: {extensions: ["mp3"], maxSize: 30},
            };

            const ext = file.name.split(".").pop();
            const fileSize = file.size / 1024 / 1024;

            const showError = (errorMessage) => {
                this.$message.error(errorMessage);
                return false;
            };

            if (ext === "mp4" || ext === "flv") {
                if (fileSize > extensionLimits.video.maxSize) {
                    return showError("文件大小不能超過300MB!");
                }
            } else if (extensionLimits.documents.extensions.includes(ext)) {
                if (fileSize > extensionLimits.documents.maxSize) {
                    return showError("文件大小不能超過30MB!");
                }
            } else if (extensionLimits.images.extensions.includes(ext)) {
                if (fileSize > extensionLimits.images.maxSize) {
                    return showError("文件大小不能超過30MB!");
                }
            } else if (extensionLimits.audio.extensions.includes(ext)) {
                if (fileSize > extensionLimits.audio.maxSize) {
                    return showError("文件大小不能超過30MB!");
                }
            } else {
                return showError("上傳文件只能是 doc、docx、xls、xlsx、ppt、pptx、pdf、rar、zip、jpg、png、gif、jpeg、mp4、flv、mp3 格式!");
            }
            this.FormLoading = true;
            let that = this
            //獲取oss上傳令牌
            return new Promise((resolve, reject) => {
                axios.get(JavaApiM + '/gt-web/resources/getSTSToken').then(res => {
                    const fileData = res.data.data
                    that.objectData.OSSAccessKeyId = fileData.accessId;
                    that.objectData.policy = fileData.policy;
                    that.objectData.Signature = fileData.signature;
                    that.objectData.callback = fileData.callback;
                    that.objectData.dir = fileData.dir;
                    that.objectData.host = fileData.host;
                    that.objectData.key = fileData.dir + '${filename}';
                    resolve(true);
                    console.log(fileData.domain + "/" + that.objectData.dir + file.name)
                })
                    .catch(res => {
                        reject(false)
                        console.log(res);
                    })
            })
        },
        handleExceed(files, fileList) {
        this.$message.warning(`當前限制選擇 1 個文件,本次選擇了 ${files.length} 個文件,共選擇了 ${files.length + fileList.length} 個文件`);
    		},
        handleSuccess(file) {
        let result = file.data;
        console.log(file);
        let info = {
            Ext: "." + result.path.split(".").pop(),
            Path: result.path,
            StatusCode: 1,
            fileSys: 2,
            name: result.path.split("/").pop()
        }
        console.log(info)
        this.fileList.push(info);
        this.FormLoading = false;
    },
        handleError(res, file) {
        this.FormLoading = false;
        this.$message.error('上傳失敗')
    		},
  }
};
</script>

<style>
</style>

java

    /**
     * 調(diào)用OSS接口獲取STS臨時訪問憑證
     *
     * @return {@link ApiRest }
     * @author liuyanqiang
     * @since 2023/06/28 10:08
     **/
    @ApiOperation(value = "調(diào)用OSS接口獲取STS臨時訪問憑證", notes = "調(diào)用OSS接口獲取STS臨時訪問憑證")
    @RequestMapping(value = "/getSTSToken", method = RequestMethod.GET)
    public ApiRest getSTSToken() {
        return super.success(resourcesService.getSTSToken());
    }

    /**
     * 回調(diào)
     *
     * @param request 請求
     * @return {@link ApiRest }
     * @author liuyanqiang
     * @since 2023/07/03 10:46
     **/
    @ApiOperation(value = "調(diào)用OSS接口上傳的回調(diào)函數(shù)", notes = "調(diào)用OSS接口上傳的回調(diào)函數(shù)")
    @RequestMapping(value = "/callback", method = RequestMethod.POST)
    public ApiRest callback(HttpServletRequest request) {
        return super.success(resourcesService.callback(request));
    }
    /**
     * 調(diào)用OSS接口獲取STS臨時訪問憑證
     *
     * @return {@link Map }<{@link String },{@link String }>
     * @author liuyanqiang
     * @since 2023/06/28 02:16
     **/
    Map<String,String> getSTSToken();

    /**
     * 回調(diào)
     *
     * @param request 請求
     * @return {@link Map }<{@link String },{@link String }>
     * @author liuyanqiang
     * @since 2023/07/06 02:55
     **/
    Map<String,String>  callback(HttpServletRequest request);
    @Value("${aliCloud.oss.access-key}")
    private String ACCESS_KEY;

    @Value("${aliCloud.oss.secret-key}")
    private String SECRET_KEY;

    @Value("${aliCloud.oss.bucket}")
    private String BUCKET;

    @Value("${aliCloud.oss.endpoint}")
    private String ENDPOINT;

    @Value("${aliCloud.oss.custom-domain}")
    private String CUSTOM_DOMAIN;

    @Value("${aliCloud.oss.file-dir}")
    private String FILE_DIR;

    @Value("${aliCloud.oss.callback-url}")
    private String CALLBACK_URL;



    /**
     * 調(diào)用OSS接口獲取STS臨時訪問憑證
     *
     * @return {@link Map }<{@link String }, {@link String }>
     * @author liuyanqiang
     * @since 2023/06/28 02:16
     **/
    @Override
    public Map<String, String> getSTSToken() {
        return ossUtil.getSTSToken(CUSTOM_DOMAIN,BUCKET, ENDPOINT, ACCESS_KEY, SECRET_KEY,FILE_DIR,CALLBACK_URL);
    }

    /**
     * 回調(diào)
     *
     * @param request 請求
     * @return {@link Map }<{@link String }, {@link String }>
     * @author liuyanqiang
     * @since 2023/07/03 10:46
     **/
    @Override
    public Map<String, String> callback(HttpServletRequest request) {
        Map<String, String> respMap = new HashMap<>();
        String filename = request.getParameter("filename");
        String path = "https://".concat(CUSTOM_DOMAIN).concat("/").concat(filename);
        respMap.put("path", path);
        respMap.put("size", request.getParameter("size"));
        respMap.put("mimeType", request.getParameter("mimeType"));
        respMap.put("height", request.getParameter("height"));
        respMap.put("width", request.getParameter("width"));
        return respMap;
    }

/**
 * 阿里云 oss 上傳工具類
 *
 * @author liuyanqiang
 * @version 1.0.0
 * @since 2023/04/19 06:36
 **/
@Slf4j
@Data
@Component
public class OSSUtil {
    /**
     * oss 工具客戶端
     */
    private static OSSClient ossClient = null;

    /**
     * 獲取STS臨時訪問憑證
     *
     * @param customDomain    自定義域
     * @param bucketName      bucket名稱
     * @param endPoint        終點
     * @param accessKeyId     訪問密鑰id
     * @param accessKeySecret 訪問密鑰秘密
     * @param fileDir         文件dir
     * @param callbackUrl     回調(diào)url
     * @return {@link Map }<{@link String }, {@link String }>
     * @author liuyanqiang
     * @since 2023/07/03 10:45
     **/
    public static Map<String, String> getSTSToken(String customDomain,String bucketName, String endPoint, String accessKeyId, String accessKeySecret, String fileDir,String callbackUrl) {
        // 初始化oss
        initOSS(bucketName, endPoint, accessKeyId, accessKeySecret);
        Map<String, String> respMap = Maps.newHashMap();
        try {
            // 拼接文件路徑
            fileDir = fileDir + DateUtil.format(new Date(), "yyyyMMdd") + "/" + System.currentTimeMillis()+"/";
            // 獲取臨時訪問憑證
            long expireTime = 30;
            long expireEndTime = System.currentTimeMillis() + expireTime * 1000;
            Date expiration = new Date(expireEndTime);
            PolicyConditions policyConds = new PolicyConditions();
            policyConds.addConditionItem(PolicyConditions.COND_CONTENT_LENGTH_RANGE, 0, 1048576000);
            policyConds.addConditionItem(MatchMode.StartWith, PolicyConditions.COND_KEY, fileDir);
            String postPolicy = ossClient.generatePostPolicy(expiration, policyConds);
            byte[] binaryData = postPolicy.getBytes("utf-8");
            String policy = BinaryUtil.toBase64String(binaryData);
            String signature = ossClient.calculatePostSignature(postPolicy);
            // 設置回調(diào)參數(shù)
            JSONObject jasonCallback = new JSONObject();
            jasonCallback.put("callbackUrl", callbackUrl);
            jasonCallback.put("callbackBody",
                    "filename=${object}&size=${size}&mimeType=${mimeType}&height=${imageInfo.height}&width=${imageInfo.width}");
            jasonCallback.put("callbackBodyType", "application/x-www-form-urlencoded");
            String callbackData = BinaryUtil.toBase64String(jasonCallback.toString().getBytes());
            respMap.put("callback", callbackData);

            respMap.put("accessId",accessKeyId);
            respMap.put("policy",policy);
            respMap.put("signature",signature);
            respMap.put("dir",fileDir);
            respMap.put("host","https://" + bucketName + "." + endPoint);
            respMap.put("expire",String.valueOf(expireEndTime / 1000));
            respMap.put("domain","https://" + customDomain);
            log.info("獲取臨時訪問憑證成功",respMap);
            return respMap;
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (ClientException e) {
            e.printStackTrace();
        }
        return respMap;
    }

    /**
     * 上傳文件至阿里云 OSS
     *
     * @param file            待上傳文件
     * @param customDomain    阿里云自定義域名
     * @param fileDir         阿里云OSS服務的訪問域名路徑
     * @param endPoint        阿里云OSS服務的訪問域名
     * @param accessKeyId     訪問密鑰id
     * @param accessKeySecret 訪問密鑰串
     * @param bucketName      上傳文件的存儲空間名稱
     * @return {@link String } 返回訪問的全路徑
     * @author liuyanqiang
     * @since 2023/04/19 06:32
     **/
    public static String uploadFileToOSS(MultipartFile file, String customDomain, String fileDir, String endPoint, String accessKeyId, String accessKeySecret, String bucketName) {
        // 初始化oss
        initOSS(bucketName, endPoint, accessKeyId, accessKeySecret);
        String visitUrl = null;
        try {
            // 獲取文件名
            String orgName = file.getOriginalFilename();
            if (StringUtils.isEmpty(orgName)) {
                orgName = file.getName();
            }
            orgName = getFileName(orgName);
            //文件名稱后綴使用

            // 拼接文件路徑
            String fileRelName = fileDir + DateUtil.format(new Date(), "yyyyMMdd") + "/" + System.currentTimeMillis() + "_" + orgName;
            // 上傳至oss
            PutObjectResult result = ossClient.putObject(bucketName, fileRelName, file.getInputStream());
            if (result != null) {
                log.info("------OSS文件上傳成功------");
            }
            // 拼接訪問路徑
            visitUrl = "https://" + customDomain + "/" + fileRelName;
        } catch (IOException e) {
            log.error(e.getMessage(), e);
            return null;
        }
        return visitUrl;
    }


    /**
     * 刪除文件
     *
     * @param bucketName      上傳文件的存儲空間名稱
     * @param fileName        要刪除的文件名稱
     * @param endPoint        阿里云OSS服務的訪問域名
     * @param accessKeyId     訪問密鑰id
     * @param accessKeySecret 訪問密鑰串
     * @return {@link VoidResult }
     * @author liuyanqiang
     * @since 2023/04/19 06:30
     **/
    public static VoidResult deleteFileToOSS(String bucketName, String fileName, String endPoint, String accessKeyId, String accessKeySecret) {
        // 初始化oss
        initOSS(bucketName, endPoint, accessKeyId, accessKeySecret);
        return ossClient.deleteObject(bucketName, fileName);
    }


    /**
     * 初始化 oss 客戶端
     *
     * @param bucketName      上傳文件的存儲空間名稱
     * @param endpoint        阿里云OSS服務的訪問域名
     * @param accessKeyId     訪問密鑰id
     * @param accessKeySecret 訪問密鑰串
     * @return {@link OSSClient }
     * @author liuyanqiang
     * @since 2023/04/19 18:23
     **/
    private static OSSClient initOSS(String bucketName, String endpoint, String accessKeyId, String accessKeySecret) {
        if (ossClient == null) {
            synchronized (OSSClient.class) {
                if (ossClient == null) {
                    ossClient = new OSSClient(endpoint, new DefaultCredentialProvider(accessKeyId, accessKeySecret), new ClientConfiguration());
                    // 設置權(quán)限(公開讀)
                    ossClient.setBucketAcl(bucketName, CannedAccessControlList.PublicRead);
                }
            }
        }
        return ossClient;
    }


    /**
     * 判斷文件名是否帶盤符,重新處理
     *
     * @param fileName 文件名稱
     * @return {@link String }
     * @author liuyanqiang
     * @since 2023/04/19 06:36
     **/
    public static String getFileName(String fileName) {
        //判斷是否帶有盤符信息
        // Check for Unix-style path
        int unixSep = fileName.lastIndexOf('/');
        // Check for Windows-style path
        int winSep = fileName.lastIndexOf('\\');
        // Cut off at latest possible point
        int pos = (winSep > unixSep ? winSep : unixSep);
        if (pos != -1) {
            // Any sort of path separator found...
            fileName = fileName.substring(pos + 1);
        }
        //替換上傳文件名字的特殊字符
        fileName = fileName.replace("=", "").replace(",", "").replace("&", "").replace("#", "");
        return fileName;
    }
}

可參考官方文檔:如何通過Java在服務端簽名直傳并設置上傳回調(diào)_對象存儲-阿里云幫助中心

SpringBoot+Vue實現(xiàn)阿里云OSS服務器簽名直傳并且返回回調(diào)數(shù)據(jù),# 項目實戰(zhàn),vue.js,spring boot,服務器?文章來源地址http://www.zghlxwxcb.cn/news/detail-539991.html

到了這里,關(guān)于SpringBoot+Vue實現(xiàn)阿里云OSS服務器簽名直傳并且返回回調(diào)數(shù)據(jù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關(guān)文章

  • 【隨筆】如何使用阿里云的OSS保存基礎的服務器環(huán)境

    【隨筆】如何使用阿里云的OSS保存基礎的服務器環(huán)境

    使用阿里云OSS創(chuàng)建一個存儲倉庫:bucket 在Linux上下載并安裝阿里云的ossutil工具 鏈接: 阿里云安裝ossutil工具手冊 編寫本地同步文件的腳本命令 使用寶塔的阿里云oss同步工具操作

    2024年02月11日
    瀏覽(21)
  • springboot整合https使用自簽名證書實現(xiàn)瀏覽器和服務器之間的雙向認證

    springboot整合https使用自簽名證書實現(xiàn)瀏覽器和服務器之間的雙向認證

    效果描述: 本地環(huán)境? 兩臺以上電腦? 可以實現(xiàn)安裝客戶端證書的電腦可以訪問springboot啟動項目,沒有安裝客戶端證書的電腦無法訪問springboot啟動項目 1.操作:需要安裝openssl工具 工具包:Win64OpenSSL_Light-3_3_0.exe 或者Win64OpenSSL_Light-3_3_0.msi? 官網(wǎng):[ Downloads ] - /source/index.html

    2024年04月28日
    瀏覽(21)
  • 如何快速搭建自己的阿里云服務器(寶塔)并且部署springboot+vue項目(全網(wǎng)最全)

    如何快速搭建自己的阿里云服務器(寶塔)并且部署springboot+vue項目(全網(wǎng)最全)

    對于新手或者學生黨來說,有時候就想租一個云服務器來玩玩或者練練手,duck不必花那么多錢去租個服務器。這些云服務廠商對學生和新手還是相當友好的。下面將教你如何快速搭建自己的阿里云服務器,完成云服務器的部署。 現(xiàn)在阿里云對于新用戶來說,還是挺仗義的,

    2024年02月04日
    瀏覽(47)
  • 微信小程序 - 超詳細 “純前端“ 將文件上傳到阿里云 OSS,最新阿里云 OSS 直傳音視頻、圖片、word、excel、ppt、office 文檔(全程無需后端,前端文件直傳阿里云oss服務器)

    微信小程序 - 超詳細 “純前端“ 將文件上傳到阿里云 OSS,最新阿里云 OSS 直傳音視頻、圖片、word、excel、ppt、office 文檔(全程無需后端,前端文件直傳阿里云oss服務器)

    網(wǎng)上的教程亂七八糟卻文件少代碼(并且沒注釋),而且都已經(jīng)很老了,對于新手來說真的無從下手。 本文站在新手小白的角度, 實現(xiàn)微信小程序開發(fā)中,“前端直傳” 上傳文件到阿里云oss對象存儲的詳細教程, 無需后端 (純前端自己完成所有簽名、上傳),保證 100% 成

    2024年02月13日
    瀏覽(120)
  • Linux服務器上傳文件到阿里云oss對象存儲的兩種方法ossutil、curl

    Linux服務器上傳文件到阿里云oss對象存儲的兩種方法ossutil、curl

    ossutil支持在Windows、Linux、macOS等系統(tǒng)中運行,您可以根據(jù)實際環(huán)境下載和安裝合適的版本。 安裝過程中,需要使用解壓工具(unzip、7z)解壓軟件包,請?zhí)崆鞍惭b其中的一個解壓工具。 yum -y install unzip Linux系統(tǒng)一鍵安裝 sudo -v ; curl https://gosspublic.alicdn.com/ossutil/install.sh | sudo b

    2024年02月13日
    瀏覽(97)
  • Java實現(xiàn)Fast DFS、服務器、OSS上傳

    支持Fast DFS、服務器、OSS等上傳方式 在實際的業(yè)務中,可以根據(jù)客戶的需求設置不同的文件上傳需求,支持普通服務器上傳+分布式上傳(Fast DFS)+云服務上傳OSS(OSS) 為了方便演示使用,本項目使用的是前后端不分離的架構(gòu) 前端:Jquery.uploadFile 后端:SpringBoot 前期準備:F

    2024年04月08日
    瀏覽(23)
  • Vue中實現(xiàn)圖片上傳,上傳后的圖片回顯,存儲圖片到服務器 【使用對象存儲OSS】

    Vue中實現(xiàn)圖片上傳,上傳后的圖片回顯,存儲圖片到服務器 【使用對象存儲OSS】

    前言 以下只提供一種思路,對新手可能不太友好。 這里將前端Vue上傳的圖片直接存儲到服務器上, Alibaba Cloud OSS : 阿里云對象存儲服務(Object Storage Service,簡稱 OSS),是阿里云提供的海量、安全、低成本、高可靠的云存儲服務。您可以在任何應用、任何時間、任何地點存儲

    2024年02月06日
    瀏覽(124)
  • 如何使用SpringBoot和Netty實現(xiàn)一個WebSocket服務器,并配合Vue前端實現(xiàn)聊天功能?

    本文將詳細介紹如何使用SpringBoot和Netty實現(xiàn)一個WebSocket服務器,并配合Vue前端實現(xiàn)聊天功能。 WebSocket是一種基于TCP的協(xié)議,它允許客戶端和服務器之間進行雙向通信,而不需要像HTTP那樣進行請求和響應。Netty是一個Java網(wǎng)絡編程框架,它提供了強大的異步事件驅(qū)動網(wǎng)絡編程能

    2024年02月16日
    瀏覽(26)
  • idea 遠程debug阿里云服務器springboot項目

    idea 遠程debug阿里云服務器springboot項目

    在實際的生產(chǎn)中不免會出現(xiàn)系統(tǒng)問題,有的在測試環(huán)境發(fā)現(xiàn),有的在預發(fā)布環(huán)境發(fā)現(xiàn),更有甚者在生產(chǎn)過程中出現(xiàn)造成事故。一般在我們發(fā)現(xiàn)問題時都會用debug來查找原因,但是有些時候我們本地環(huán)境由于某些原因根本不能復現(xiàn)線上問題。那么,這個時候我們可以考慮用遠程

    2024年02月05日
    瀏覽(17)
  • 部署vue項目到阿里云服務器

    部署vue項目到阿里云服務器

    一般前端工程師只會使用npm run serve 在開發(fā)環(huán)境下驗證,那么如何把npm run build 打出的包部署到服務器上進行上線呢?這篇文章就詳細闡述這一流程。 1. 購買或試用阿里云服務器 ? ? 作為新用戶可以試用一個月阿里云服務器,阿里云官方網(wǎng)址如下:https://www.aliyun.com/?utm_conte

    2024年02月05日
    瀏覽(27)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包