JS使用OSS上傳文件遇到的一些問題


使用阿里雲OSS JavaScript SDK上傳圖片

 博客里看:https://www.zjhuiwan.cn/info/20200603/4012062473071713.html

html代碼:

<input type='file' accept=\"image/*\" name='option' onchange='uploadPic(this)' style='width: 80%;margin-right: 12px;'/>

 

JS代碼

<!-- 引入在線資源 -->
<script src="http://gosspublic.alicdn.com/aliyun-oss-sdk-5.3.0.min.js"></script>

<script type="text/javascript">
var client = new OSS.Wrapper({
    region: 'oss-cn-hangzhou',
    accessKeyId: 'xxxxxxx',
    secure:true,
    accessKeySecret: 'xxxxxxx',
    bucket: 'xxx'
});
function uploadPic(obj){
    var file=obj.files[0];//獲取文件流
    var val= obj.value;
    var suffix = val.substr(val.indexOf("."));
    var storeAs = "studio_course/"+timestamp()+suffix;
    console.log(file.name + ' => ' + storeAs);
    client.multipartUpload(storeAs, file).then(function (result) {
        console.log(result)
    }).catch(function (err) {
        console.log(err);
    });
}


/**
 * 生成文件名
 * @returns
 */
function timestamp(){
    var time = new Date();
    var y = time.getFullYear();
    var m = time.getMonth()+1;
    var d = time.getDate();
    var h = time.getHours();
    var mm = time.getMinutes();
    var s = time.getSeconds();
    console.log(y);
    return ""+y+add0(m)+add0(d)+add0(h)+add0(mm)+add0(s);
}
function add0(m){
    return m<10?'0'+m : m;
}
</script>

 

以上為js上傳圖片的完整代碼

參數備注:

  accessKeyId:連接阿里雲的accessKeyId

  accessKeySecret:連接阿里雲的accessKeyScret

  dir:文件夾的名稱

  bucketName:阿里雲bucketName的名稱

  file:文件流

timestamp()根據年月日時分秒生產文件名
------------------------------------------------------------------------------
  region:“xxx” //oss區域

  accessKeySecret:連接阿里雲的accessKeyScret

  dir:文件夾的名稱

  bucket:阿里雲oss的名稱

返回結果:

image.png

最后拼接路徑:

imgurl="https://"+bucket+".oss-cn-hangzhou.aliyuncs.com/"+ result.name;

遇到的幾個問題:

跨域問題

image.png

解決辦法:阿里雲oss設置跨域訪問

OSS 提供 HTML5 協議中的跨域資源共享 CORS 設置,幫助您實現跨域訪問。當 OSS 收到一個跨域請求(或者 OPTIONS 請求)時,會讀取存儲空間對應的 CORS 規則,然后進行相應的權限檢查。OSS 會依次檢查每一條規則,使用第一條匹配的規則來允許請求並返回對應的 header。如果所有規則都匹配失敗,則不附加任何 CORS 相關的 header。

  1. 進入 OSS 管理控制台 界面。

  2. 在左側存儲空間列表中,單擊目標存儲空間名稱,打開該存儲空間概覽頁面。

  3. 單擊 基礎設置 頁簽,找到 跨域設置 區域,然后單擊 設置。

  4. 單擊 創建規則,打開 設定跨域規則 對話框。

  5. 設置跨域規則。

    • 來源:指定允許的跨域請求的來源。允許多條匹配規則,以回車為間隔。每個匹配規則允許使用最多一個“*”通配符。

    • 允許 Methods:指定允許的跨域請求方法。

    • 允許 Headers:指定允許的跨域請求 header。允許多條匹配規則,以回車為間隔。每個匹配規則使用最多一個“*”通配符。

    • 暴露 Headers:指定允許用戶從應用程序中訪問的響應頭(例如一個 Javascript 的 XMLHttpRequest 對象)。

    • 緩存時間:指定瀏覽器對特定資源的預取(OPTIONS)請求返回結果的緩存時間。

      說明: 每個存儲空間最多可以配置 10 條規則。

  6. 單擊 確定。

 

image.png

InvalidPartError400報錯

image.png

解決辦法:阿里雲oss設置跨域訪問時給暴露 Headers添加Etag

image.png

RequestError: XHR error (req "error"), POST http://xxx.xxx/uploa......報錯

解決辦法:在配置中加入secure:true

var client = new OSS.Wrapper({
region : 'oss-cn-hanghzou',
secure:true,//*這句話很重要!!!!!!!!!
accessKeyId : 'xxx',
accessKeySecret : 'xxx',
bucket : 'xxx'
});

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM