七牛上传图片
我使用七牛是因為我懶得管理圖片,也懶得處理圖片縮放之類的東西。
最主要的,感覺用七牛逼格比較高。
傻瓜式的順序:注冊七牛賬號->實名認證->充值10塊錢->開始使用
這時候你去個人中心->密鑰管理,可以看到AK和SK兩個值,這兩個值是七牛確認是誰在上傳圖片,也就是確認身份用的,所以千萬不要給心懷不軌的人看到。
圖片上傳應該都需要以下幾件事:
1.用戶選擇想要上傳的圖片
2.預覽圖片
3.上傳圖片
4.提交表單
5.后臺確認表單提交成功,將已上傳的圖片標記為永存。
上傳圖片是指把圖片上傳到七牛,提交表單是把圖片地址保存到數據庫,這樣可以給自己的網站省很大一部分帶寬
可能是我沒有深入的了解七牛上傳圖片的機制,我發現七牛并不能先暫時緩存圖片,然后提交表單以后再確認保存。
因此我自己用了一個笨方法,創建兩個空間,一個空間用來緩存,另一個空間用做真正的保存。
具體的步驟是:
1.用戶選擇圖片
2.預覽圖片
3.用戶點擊提交表單
4.上傳圖片(把圖片上傳到緩存空間,并標記緩存一天)
5.上傳成功后提交表單
6.后臺將緩存中的圖片復制一份到真正的空間中,復制成功后刪除緩存圖片(不用管是否刪除成功,大不了緩存一天)
根據步驟, 一點一點來,完成前三步需要后端提供一個七牛生成的token,還有前端的plupload方法
首先是后臺如何生成七牛token?
我不告訴你,自己去看文檔吧,我覺得這個很簡單,但是記住了,給前端生成的token要標注緩存1天,也就是24小時以后要刪除。
然后是前端的代碼
你去看看七牛對JavaScript的文檔,然后我給你一個函數,看不懂留言
?
[javascript]?view plaincopy- /*設置Qiniu.uploader對象參數*/??
- function?setOption(parent,?button,?last,?token){??
- ????return?{??
- ????????runtimes:?'html5,flash,html4',????//上傳模式,依次退化??
- ????????container:?parent,???????????//上傳區域DOM?ID,默認是browser_button的父元素,??
- ????????drop_element:?parent,????????//拖曳上傳區域元素的ID,拖曳文件或文件夾后可觸發上傳??
- ????????browse_button:?button,???????//上傳選擇的點選按鈕,**必需**??
- ????????uptoken_url:?'/web/qiniu/getsdk',????????????//Ajax請求upToken的Url,**強烈建議設置**(服務端提供)??
- ????????uptoken?:?token,?//若未指定uptoken_url,則必須指定?uptoken?,uptoken由其他程序生成??
- ????????//?save_key:?true,???//?默認?false。若在服務端生成uptoken的上傳策略中指定了?`sava_key`,則開啟,SDK會忽略對key的處理??
- ????????domain:?'http://ofc0yhzbv.bkt.clouddn.com/',???//bucket?域名,下載資源時用到,**必需**??
- ????????get_new_uptoken:?false,??//設置上傳文件的時候是否每次都重新獲取新的token??
- ????????max_file_size:?'10mb',???????????//最大文件體積限制??
- ????????flash_swf_url:?'js/plupload/Moxie.swf',??//引入flash,相?對路徑??
- ????????max_retries:?3,???????????????????//上傳失敗最大重試次數??
- ????????dragdrop:?true,???????????????????//開啟可拖曳上傳??
- ????????chunk_size:?'10mb',????????????????//分塊上傳時,每片的體積??
- ????????auto_start:?false,?????????????????//選擇文件后自動上傳,若關閉需要自己綁定事件觸發上傳??
- ????????unique_names:?true,??????//設置所有文件名唯一??
- ????????filters:?{??
- ????????????mime_types?:?[?//只允許上傳圖片??
- ????????????????{?title?:?"Image?files",?extensions?:?"jpg,jpeg,gif,png"?},??
- ????????????],??
- ????????????prevent_duplicates?:?false?//不允許選取重復文件??
- ????????},??
- ????????deleteAfterDays:'',??
- ????????init:?{??
- ????????????'FilesAdded':?function(up,?files)?{??
- ????????????????//?設置預覽圖地址??
- ????????????????var?img?=?new?o.Image();??
- ????????????????img.onload?=?function?(){??
- ????????????????????$("#"?+?button).attr('src',?this.getAsDataURL());??
- ????????????????}??
- ????????????????img.load(files[0].getSource());??
- ????????????????//?開始上傳按鈕??
- ????????????????$("#"?+?button?+?"_start").click(function(){?up.start();?});??
- ????????????????plupload.each(files,?function(file)?{??
- ????????????????????//?如果上傳文件大于1?ps:第一個文件上傳的時候用戶選擇第二個文件??
- ????????????????????//?這時隊列大于1,隊列的第一個文件是正在上傳的,第二個是新選的??
- ????????????????????if?(up.files.length?>?1)?{??
- ????????????????????????//?移除當前隊列里第一個文件??
- ????????????????????????up.removeFile(up.files[0]);??
- ????????????????????}??
- ????????????????????//?全局變量?根據變量控制不讓表單提前提交??
- ????????????????????imgloading?=?true;??
- ????????????????????//?文件添加進隊列后,處理相關的事情??
- ????????????????});??
- ????????????},??
- ????????????'BeforeUpload':?function(up,?file)?{??
- ????????????????//?每個文件上傳前,處理相關的事情??
- ????????????????$("#"?+?button?+?"_uploading").click(function?()?{??
- ????????????????????up.stop();??
- ????????????????????$("#"?+?button?+?"_uploading").fadeOut();??
- ????????????????});??
- ????????????},??
- ????????????'UploadProgress':?function(up,?file)?{??
- ????????????????if($("#"?+?button?+?"_uploading").length?<?1){??
- ????????????????????return;??
- ????????????????}??
- ????????????????$("#"?+?button?+?"_uploading").show();??
- ????????????????$("#"?+?button?+?"_uploading").html(up.total.percent?+?"%(點擊取消)");??
- ???????????????????//?每個文件上傳時,處理相關的事情??
- ????????????},??
- ????????????'FileUploaded':?function(up,?file,?info)?{??
- ????????????????var?domain?=?up.getOption('domain');??
- ????????????????var?res?=?$.parseJSON(info);??
- ????????????????var?sourceLink?=?domain?+?res.key;?//獲取上傳成功后的文件的Url??
- ????????????????//?設置圖片名稱??
- ????????????????$("#"?+?button?+?"_input").val(res.key);??
- ????????????????//?進度更新為上傳完成??
- ????????????????$("#"?+?button?+?"_uploading").html("上傳完成");??
- ????????????????$("#"?+?button?+?"_uploading").unbind();??
- ????????????????//?圖片上傳后執行事件??
- ????????????????//?eval(last+"()");??
- ????????????????last();??
- ????????????},??
- ????????????'Error':?function(up,?err,?errTip)?{??
- ????????????????alert("目前只支持圖片格式:jpg,jpeg,gif,png");??
- ???????????????????//上傳出錯時,處理相關的事情??
- ????????????},??
- ????????????'UploadComplete':?function()?{??
- ???????????????????//隊列文件處理完畢后,處理相關的事情??
- ????????????},??
- ????????}??
- ????};??
- }??
通過這個函數,可以點擊圖片選擇圖片,然后預覽,上傳,上傳成功后提交表單
?
提交表單以后,事情就簡單多了,后臺轉存圖片,然后刪除緩存圖片,bingo。
圖片上傳就搞定了,如果大家想做異步上傳,也可以,不過如果做異步上傳的話。。。是會有問題的,具體什么問題,有心人可以來問我。
作者:http://blog.csdn.net/shuzipai/article/details/52874383
轉載于:https://www.cnblogs.com/duyanming/p/6841966.html
總結
- 上一篇: DFS template and sum
- 下一篇: 邮箱验证功能原理 语法 属性