摘要:背景可用于圖片音視頻日志等海量文件的存儲。支持流式寫入和文件寫入兩種方式。這種方式的缺點是,文件要先上傳到應用服務器,再上傳到,占用帶寬資源,過程雖然簡單易于操作但是比較繁瑣。這里是上面服務端返回的簽名對象上傳文件名
背景
OSS可用于圖片、音視頻、日志等海量文件的存儲。各種終端設備、Web網站程序、移動應用可以直接向OSS寫入或讀取數據。OSS支持流式寫入和文件寫入兩種方式。使用阿里云oss做文件存儲的時候,不可避免的涉及到文件的上傳,大概分為兩種方式:
服務端驗證上傳先將文件傳遞到應用服務器,再由應用服務器上傳至oss服務器,這種方式的優點是簡單易懂,nodejs只需要按照文檔使用ali-oss中間件上傳就行,本文重點不放在這種方式,如果有需要可以私信我。這種方式的缺點是,文件要先上傳到應用服務器,再上傳到oss,占用帶寬資源,過程雖然簡單易于操作但是比較繁瑣。
服務端簽名前端直傳這種方式是我比較推薦使用的,但是需要自己對移動端進行簽名,官方的例子給出了一個php版本的簽名服務文件,同時上傳使用的是plupload這個功能強大,但是不支持模塊化使用的插件,于是經過一番琢磨,將php版本的簽名服務改成了js版本,同時提供axios版本的文件上傳供大家參考,親測可行。
服務代碼:
const crypto =require("crypto") async getSingature(ctx){ ctx.status=200; const _config={...}//里面存放阿里云oss的配置參數,不詳細說明,用的都應該懂 const OSSAccessKeyID=_config["spring.aliyun.oss.access-key-id"] const OSSAccessKeySecret=_config["spring.aliyun.oss.access-key-secret"] const OSSEndPoint=_config["spring.aliyun.oss.end-point"] const OSSBucketName=_config["spring.aliyun.oss.bucket-name"]; let now=new Date(); const expire=300; //簽名有效時間五分鐘,可自行設定 const end = now.getTime()/1000 + expire; //過期時間 let expiration=new Date((now.getTime()/1000+expire)*1000); //oss服務器時間格式iso expiration=expiration.toISOString(); //上傳目錄 const dir= "" //上傳的限制規則 const condition=["content-length-range",0,1048576000] const start=["start-with","key",dir]; const conditions=[condition] const arr={ expiration, conditions } //上傳策略(規則對象轉json字符串) const policy=JSON.stringify(arr); //進行base64編碼 const base64_policy= (new Buffer(policy)).toString("base64"); const string_to_sign=base64_policy; //使用crypto簽名 const signature=crypto.createHmac("sha1", OSSAccessKeySecret).update(string_to_sign).digest().toString("base64"); const host="http://"+OSSBucketName+"."+OSSEndPoint.split("http://")[1]; const accessid=OSSAccessKeyID; //返回結果給前端 return { accessid, signature, policy:base64_policy, expire:end, dir, host } }
前端上傳:
注意:oss一次只能上傳一個文件(只有一個key),可以循環執行post,key為上傳到oss后的文件名。signatureObj這里是上面nodejs服務端返回的簽名對象
var file=ducument.getElementById("file").files[0] var formData = new FormData(); formData.append("key","上傳文件名"); formData.append("name",file.name) formData.append("policy",signatureObj.policy) formData.append("OSSAccessKeyId",signatureObj.accessid) formData.append("success_action_status","200") formData.append("callback","") formData.append("signature",signatureObj.signature) formData.append("file",file.file) axios({ url:url, method:"post", data:formdata, headers: { "Content-Type": "multipart/form-data" } })
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/54557.html
摘要:背景可用于圖片音視頻日志等海量文件的存儲。支持流式寫入和文件寫入兩種方式。這種方式的缺點是,文件要先上傳到應用服務器,再上傳到,占用帶寬資源,過程雖然簡單易于操作但是比較繁瑣。這里是上面服務端返回的簽名對象上傳文件名 背景 OSS可用于圖片、音視頻、日志等海量文件的存儲。各種終端設備、Web網站程序、移動應用可以直接向OSS寫入或讀取數據。OSS支持流式寫入和文件寫入兩種方式。使用阿里...
摘要:前言為了減輕服務器壓力,采用直傳的方式,直接把資源圖片,文件,視頻等上傳到阿里云服務器。這個是需要觸發這個回調來通知服務器操作結果。服務器端同事調的,通過接口返回給前端的。這個就是簽名,最關鍵的。的的使用如下結束這樣就搞定了。 前言: 為了減輕服務器壓力,采用web直傳的方式,直接把資源(圖片,文件,視頻等)上傳到阿里云oss服務器。但是阿里只提供 plupload.js 環境下的 d...
摘要:和數據直傳到相比,以上方法有三個缺點上傳慢。端向服務端請求簽名,然后直接上傳,不會對服務端產生壓力,而且安全可靠。規定返回數據的格式,當前默認返回圖片信息寬度高度,可獲取更多數據。 背景 每個OSS的用戶都會用到上傳服務。Web端常見的上傳方法是用戶在瀏覽器或app端上傳文件到應用服務器,然后應用服務器再把文件上傳到OSS。 showImg(https://segmentfault.c...
摘要:筆主很早就開始用阿里云存儲服務當做自己的圖床了。阿里云對象存儲文檔,本篇文章會介紹到整合阿里云存儲服務實現文件上傳下載以及簡單的查看。 Github 地址:https://github.com/Snailclimb/springboot-integration-examples(SpringBoot和其他常用技術的整合,可能是你遇到的講解最詳細的學習案例,力爭新手也能看懂并且能夠在看完...
閱讀 3688·2021-11-19 09:56
閱讀 1468·2021-09-22 15:11
閱讀 1127·2019-08-30 15:55
閱讀 3371·2019-08-29 14:02
閱讀 2911·2019-08-29 11:07
閱讀 433·2019-08-28 17:52
閱讀 3172·2019-08-26 13:59
閱讀 436·2019-08-26 13:53