国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

七牛 js JDK使用 - 上傳APP

elva / 800人閱讀

摘要:背景介紹使用將包括安卓和上傳到七牛上傳所以不考慮數據處理使用后臺得到七牛上傳基于下面不詳述如何使用參見七牛上傳的簡單案例也不詳述,參見官網事例很清楚了。指定上傳的目標資源空間和資源鍵的長度最大為字節。,表示只允許用戶上傳指定的文件。

背景介紹

使用JS將APP(包括安卓和IOS)上傳到七牛 (上傳APP所以不考慮數據處理)

uptoken使用JAVA后臺得到

七牛上傳基于plupload下面不詳述如何使用參見

七牛上傳的簡單案例也不詳述,參見官網事例很清楚了。就是參數一定看仔細!

清除緩存問題

IOS APP上傳icon和ipa自動生成plist

補充:限制選擇文件類型;打開多個選擇文件窗口

踩過的坑 uptoken獲得失敗

1.使用前端獲取:
本人是個前端,在后臺還沒給出獲取uptoken接口時,我先選擇了使用JS(uptoken_func參數)獲取進行測試,代碼如下:詳細參見

    // uptoken_func: function (file) {    // 在需要獲取uptoken時,該方法會被調用
    /**
     * 上傳憑證算法實現參考
     * 請注意External Resources項中引用的第三方CryptoJS庫
     */
    var genUpToken = function(accessKey, secretKey, putPolicy) {
        //SETP 2
        var put_policy = JSON.stringify(putPolicy);
        //SETP 3
        var encoded = base64encode(utf16to8(put_policy));
        //SETP 4
        var hash = CryptoJS.HmacSHA1(encoded, secretKey);
        var encoded_signed = hash.toString(CryptoJS.enc.Base64);
        //SETP 5
        var upload_token = accessKey + ":" + safe64(encoded_signed) + ":" + encoded;
        console && console.log("upload_token=", upload_token)
        return upload_token;
  // }

費了半天勁,又是引入CryptoJS,又是加入utf16to8等等方法,最后還是失敗了,生成了一個uptoken我用來上傳文件上傳失敗,就問七牛工單,他說uptoken過時或者錯誤,這就沒法搞了也不知道為什么錯,就在沒有頭緒的時候后臺接口好了,得,用后臺接口,結束!(有童鞋用JS獲取了uptoken的可以來交流)
不過在錯誤中學習到了uptoken的第三個值(用“:”分割的aaaa:aaaa:aaaa)可以通過base64解碼得到上傳策略。

2.使用后臺獲取(我選擇的是java)
導入gson-1.6.jar和qiniu-java-sdk-7.0.0.jar,以下是qiniu的方法!是用uptoken,傳入需要的參數既可以獲得,本人不做后臺開發就不詳述,就是一定注意參數不要傳錯了,我們搞了好久AK,SK復制錯了,如果提示uptoken錯誤多檢查幾遍參數。到此完成了一個最簡單的上傳。圖片描述

4M以上大文件上傳失敗

奇葩一樣的大坑啊,本來就是剛剛上手qiniu還沒搞懂的時候還在郁悶昨天還好好的怎么過了一晚就上傳失敗了,查詢資料,全不費功夫社區有人踩過了。看第二個評論,簡單說就是設置uptoken參數不能上傳大文件,必須設置uptoken_url才行,作者說的第一個方法我進不去,就沒有糾結。這個是qiniu的bug!

你直接看源碼就知道它在判斷需要分塊的時候,js-sdk內部設置up.setOption的調用getUptoken(),that.tokenInfo在只填寫token的時候,還是undefined,所以就出問題了。
因為tokenInfo是在走getNewUpToken()設置的,而getNewUpToken是走填了url才會執行的函數。

覆蓋已有文件

剛剛拿到需求,思索一番,

方案一:生成一個可用覆蓋文件的uptoken;

方案二:qiniuJSjdk通過配置參數可以覆蓋文件。

查閱API,社區資料,發現方案一可以行的通,只需后臺uptoken方法時傳入key參數即可覆蓋服務器上面的key文件。
我原以為key也是后臺給設定的存儲文件名,(這個key并不是服務器存儲的最終文件名)后來才發現不是,詳細看scope參數。

指定上傳的目標資源空間 Bucket 和資源鍵 Key(key的長度最大為750字節)。有兩種格式:
,表示允許用戶上傳文件到指定的 bucket。在這種格式下文件只能新增,若已存在同名資源上傳則會失敗。
:,表示只允許用戶上傳指定 key的文件。在這種格式下文件默認允許修改,若已存在同名資源則會被覆蓋。如果只希望上傳指定 key 的文件,并且不允許修改,那么可以將下面的insertOnly 屬性值設為 1。

由于后臺需要key,所以前臺在uptoken_url時傳參,例如:"/appstore/app/qiniuUploadToken?params=a.png"。

關于文件名

前臺有三個參數和文件名有關:

// unique_names: true,              // 默認false,key為文件名。若開啟該選項,JS-SDK會為每個文件自動生成key(文件名)
// save_key: true,                  // 默認false。若在服務端生成uptoken的上傳策略中指定了sava_key,則開啟,SDK在前端將不對key進行任何處理
"Key": function (up, file) {
    // 若想在前端對每個文件的key進行個性化處理,可以配置該函數
    // 該配置必須要在unique_names: false,save_key: false時才生效
    var key = file.name;//**錯誤**
   // do something with key here
   return key
   }

重點看第三個參數,當時沒有在意就這樣寫的,所以認為給后臺傳的key就是服務器存儲的文件名,其實不然,是我在JS key中設置了var key = file.name。應該需要前端定一個名字,而不是文件原名。

清除緩存問題

看官方文檔給出如下解決方法,生成管理token,清除緩存。
但是客服給出了更好的解決方案

一、URL 問號傳參刷新:
二、在七牛云存儲上刷新: 1、登錄portal.qiniu.com 2、工具刷新 3、API 接口文檔刷新:
三、只使用fusion cdn加速,且沒有使用七牛存儲

我選擇了最簡單的第一種,URL 問號傳參。(拋出問題:ios app是ipa url問號傳參,還是plisturl問號傳參,還是都需要,待測試驗證,之后更新!)

例如,如果 http://7xt44n.com2.z0.glb.qin...
這個圖片資源沒有更新, 可以在該 URL 后面加上參數的形式來讓 CDN
強制刷新:http://7xt44n.com2.z0.glb.qin...,CDN
拿到這個 URL 后會強制回七牛的存儲中取回最新的資源。

原理: (用戶創建空間為普通平臺,在這個平臺下 url 是完整緩存的。也就是說。如果你帶了? 1234 這樣的查詢參數在文件 url
后面,就變成了不同的 url,所以不會命中 cdn 的緩存。會去原站七牛拉資源,這時候拉取到的資源就變成了覆蓋更新后的資源了。)

IOS APP上傳icon和ipa自動生成plist

原先的ios部署非常不方便,需要上傳icon和ipa得到地址后修改plist,再上傳plist。所以就想能不能做到自動。
還是喜歡先查閱資料看看網上有沒有方案,一無所獲。
方案如下:(以下代碼感謝導師的支持)

使用Arttemplate得到一個模板

使用blob得到一個blob數據用于生成file對象

使用七牛的表單上傳,結合XMLHttpRequest,formData得到一個表單數據
詳細代碼:

function plist(icon57Url, icon512Url, ipaUrl, key,plistUrl) {
    var data = {
        icon57Url: icon57Url,
        icon512Url: icon512Url,
        ipaUrl: ipaUrl,
    };
    var html = template("test", data);
    var blob = new Blob([html], {type: "text/plain"});
    //document.getElementById("content").innerHTML = html;
    var Qiniu_UploadUrl = "http://up.qiniu.com";
    var Qiniu_upload = function (f, token) {
        var xhr = new XMLHttpRequest();
        xhr.open("POST", Qiniu_UploadUrl, true);
        var formData, startDate;
        formData = new FormData();
        //if (key !== null && key !== undefined) formData.append("key", key);
        formData.append("token", token);
        formData.append("name", key + ".plist");
        formData.append("chunk", 0);
        formData.append("chunks", 1);
        formData.append("key", key + ".plist");
        formData.append("file", f, key + ".plist");
        var taking;
        xhr.upload.addEventListener("loadstart", function (up, file) {
            /*up.settings.multipart_params = {
             filename : "xucheng.docx"
             };*/
        }, false);
        xhr.upload.addEventListener("progress", function (evt) {
            if (evt.lengthComputable) {
                /*var nowDate = new Date().getTime();
                 taking = nowDate - startDate;
                 var x = (evt.loaded) / 1024;
                 var y = taking / 1000;
                 var uploadSpeed = (x / y);
                 var formatSpeed;
                 if (uploadSpeed > 1024) {
                 formatSpeed = (uploadSpeed / 1024).toFixed(2) + "Mb/s";
                 } else {
                 formatSpeed = uploadSpeed.toFixed(2) + "Kb/s";
                 }*/
                //var percentComplete = Math.round(evt.loaded * 100 / evt.total);
                //progressbar.progressbar("value", percentComplete);
                // console && console.log(percentComplete, ",", formatSpeed);
            }
        }, false);

        xhr.onreadystatechange = function (response) {
            if (xhr.readyState == 4 && xhr.status == 200 && xhr.responseText != "") {
                var blkRet = JSON.parse(xhr.responseText);
                Compost("/appstore/app/updateOneProperty",{"id":datascope.appid,"ios_url":plistUrl},function () {
                    $("#ios_url").textbox("setText", plistUrl);
                })
                console.log("plist上傳成功")
            } else if (xhr.status != 200 && xhr.responseText) {

            }
        };
        startDate = new Date().getTime();
        $("#progressbar").show();
        xhr.send(formData);
    };
    /*var reader = new window.FileReader();
     reader.readAsDataURL(blob);
     reader.onloadend = function() {
     var base64data = reader.result;
     console.log(base64data);
     }*/
    $.ajax({
        type: "get",
        url: "/appstore/app/qiniuUploadToken?params=" + key + ".plist",
        async: true,
        dataType: "json",
        success: function (data) {
            var token = data.uptoken;
            console.log(token);
            Qiniu_upload(blob, token);
        }
    });
}

到此最重要的一步自動上傳plist完成!,以此共同學習。

補充 限制選擇文件類型

plupload插件支持,ipa和apk都是zip類型,所以title是Zip files

filters: {
                mime_types: [
                   {title: "Image files", extensions: "png"}, //限定png后綴上傳
                   {title: "Zip files", extensions: "ipa"}, //限定ipa后綴上傳
                   {title: "Zip files", extensions: "apk"}, //限定apk后綴上傳
                ]
            },
打開多個選擇文件窗口

每次實例化option方法時會( browse_button: *// 上傳選擇的點選按鈕,必需)給按鈕綁定一個點擊事件,所以之后會點擊打開多次選擇文件窗口。
嘗試解決方案(失敗):銷毀option對象,銷毀對象綁定的事件不會刪除
銷毀綁定事件,由于沒有事件名稱所以無法刪除
嘗試解決方案(成功):

 if (uploader) {uploader.disableBrowse(true);}

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/80830.html

相關文章

  • Laravel中前端js上傳圖片到七牛

    摘要:以下中使用瀏覽器端上傳圖片到七牛云,下面只是做一些簡單的流程實例。你的控制器地址請求成功之后,調用剛剛寫好的方法,把傳入過去讓頁面初始化的時候就請求這里差不多就可以啦,更多的操作參考文檔七牛云官方文檔 以下Laravel中使用瀏覽器端上傳圖片到七牛云,下面只是做一些簡單的流程實例。詳情請看官方文檔七牛云官方js文檔 1. 首先引入相應的js文件,下面是通過CDN引入的Staticfi...

    jollywing 評論0 收藏0
  • Laravel中前端js上傳圖片到七牛

    摘要:以下中使用瀏覽器端上傳圖片到七牛云,下面只是做一些簡單的流程實例。你的控制器地址請求成功之后,調用剛剛寫好的方法,把傳入過去讓頁面初始化的時候就請求這里差不多就可以啦,更多的操作參考文檔七牛云官方文檔 以下Laravel中使用瀏覽器端上傳圖片到七牛云,下面只是做一些簡單的流程實例。詳情請看官方文檔七牛云官方js文檔 1. 首先引入相應的js文件,下面是通過CDN引入的Staticfi...

    EscapedDog 評論0 收藏0
  • 用純Javascript實現React Native的文件上傳

    摘要:是上傳到服務器的文件名,是請求令牌。七牛云將持續發布服務于企業的云服務,也會在第一時間發布平臺的,讓使用的小伙伴在第一時間集成七牛云的最新服務。 React Native 是最近兩年最值得花時間跟進的移動開發技術,這個項目始于2013年Facebook內部的一個黑客馬拉松項目,在2014年7月之前這個項目都偏向于實驗性質,直到廣告管理團隊想要構建一個獨立的iOS應用,然而這個團隊并沒有...

    JasonZhang 評論0 收藏0
  • Webpack 項目優化雜記

    摘要:入口文件打包出口地址在中可以配置我們的地址這里你要有一個七牛云的賬戶。特別像是七牛云這樣擁有圖片處理引擎的服務商,我們還可以通過來處理上傳至的圖片。 本項目源碼均可在 這里 找到。 之前公司的官網項目靜態文件都是放在靜態服務器中,這其中的弊端就不贅述了。簡單說一下 CDN 的好處: CDN 可以解決因分布、帶寬、服務器性能帶來的訪問延遲問題,適用于站點加速、點播、直播等場景。使用戶可就...

    incredible 評論0 收藏0
  • koa2實現上傳圖片,并且同步上傳七牛云存儲

    摘要:因為升級到新的版本,之前的通過很多上傳圖片的方式都已經不適用了,所以自己就寫了一個對于上傳圖片的小記錄一下心得。 因為升級到新的node版本,之前的通過很多上傳圖片的方式都已經不適用了,所以自己就寫了一個對于 koa2上傳圖片的小demo,記錄一下心得。 廢話不多說,下面直接上代碼,里面都有注釋。 const Koa = require(koa); const route = requ...

    laznrbfe 評論0 收藏0

發表評論

0條評論

elva

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<