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

資訊專欄INFORMATION COLUMN

用純Javascript實(shí)現(xiàn)React Native的文件上傳

JasonZhang / 1320人閱讀

摘要:是上傳到服務(wù)器的文件名,是請求令牌。七牛云將持續(xù)發(fā)布服務(wù)于企業(yè)的云服務(wù),也會在第一時間發(fā)布平臺的,讓使用的小伙伴在第一時間集成七牛云的最新服務(wù)。

React Native 是最近兩年最值得花時間跟進(jìn)的移動開發(fā)技術(shù),這個項(xiàng)目始于2013年Facebook內(nèi)部的一個黑客馬拉松項(xiàng)目,在2014年7月之前這個項(xiàng)目都偏向于實(shí)驗(yàn)性質(zhì),直到廣告管理團(tuán)隊(duì)想要構(gòu)建一個獨(dú)立的iOS應(yīng)用,然而這個團(tuán)隊(duì)并沒有iOS開發(fā)經(jīng)驗(yàn)的工程師,于是在接下來的幾個月里廣告團(tuán)隊(duì)和React Naitve團(tuán)隊(duì)緊密合作,共同推進(jìn)了該項(xiàng)目的發(fā)展。2015年2月,iOS版本的Ads Manager在App Store發(fā)布標(biāo)志著這個產(chǎn)品可以應(yīng)用在生產(chǎn)環(huán)境中,接著2015年3月,在Facebook的F8大會上這一項(xiàng)目宣布開源并公開了ReactNaitve的源碼,與此同時,Android版本的React Native和Ads Manager也在開發(fā)過程中。2015年6月,Android版本的Ads Manager發(fā)布到Play Store,9月14日在千呼萬喚的期待聲中,Android版本的React Native發(fā)布,今年剛剛結(jié)束的F8大會,微軟也擁抱React Native,發(fā)布他們移植React Naitve到Windows的進(jìn)度和計(jì)劃,并發(fā)布了基于React Naitve的F8 UMP。

本文將介紹:

如何使用原生Javascript上傳文件

如何使用七牛云SDK上傳文件到七牛云
在App中文件上傳是一個非常重要的需求,但是翻遍React Naitve的官方文檔沒有發(fā)現(xiàn)有詳細(xì)介紹文件上傳的文章,在github上搜索一下倒是發(fā)現(xiàn)了不少repo在做這樣的事情


https://github.com/PhilippKrone/react-native-fileupload


https://github.com/eduedix/react-native-networking

遺憾的是這項(xiàng)項(xiàng)目都是基于native code實(shí)現(xiàn)的,雖然在React Native 使用NativeComment有很好的工具支持,但是終歸沒有直接使用純JS的庫更方便。其實(shí)React Native已經(jīng)悄悄支持了文件上傳,我們可以不用引入任何依賴、從容的用幾行JS來解決文件上的問題。

let formData = new FormData();
formData.append("file", {uri: uri, type: "application/octet-stream",
name: key});
formData.append("key", key);
formData.append("token", token);
let options = {};
options.body = formData;
options.method = "post";
return fetch(conf.UP_HOST, options).then((response) => {
});

是不是非常簡單直白?上面這幾行代碼對應(yīng)到html的表單類似這樣,我們用這幾行代碼模擬了一次文件上傳的表單

對應(yīng)的Http請求類似如下

POST / HTTP/1.1
Host: upload.qiniu.com
Content-Type: multipart/form-data; boundary=
Content-Length: 
--
Content-Disposition: form-data; name="token"

--
Content-Disposition: form-data; name="key"

--
Content-Disposition: form-data; name=""

--
Content-Disposition: form-data; name="crc32"

--
Content-Disposition: form-data; name="accept"

--
Content-Disposition: form-data; name="file";
filename=""
Content-Type: application/octet-stream
Content-Transfer-Encoding: binary

----

下面詳細(xì)分析一下這幾行簡短的代碼的作用,

let formData = new FormData();
formData.append("file", {uri: uri, type: "application/octet-stream",
name: key});
formData.append("key", key);
formData.append("token", token);

我們首先創(chuàng)建一個FormData對象,F(xiàn)ormData對象指代一個Form表單對象的內(nèi)容,這里我們只需要關(guān)注Form內(nèi)的內(nèi)容和他們的Content-Type就可以了,這里我們添加了key,token和file這幾個form內(nèi)容,并特別指定了file的Content-Disposition的類型是application/octet-stream ,代表這是一個任意的二進(jìn)制數(shù)據(jù),這里可以是png,jpeg的圖片和其他任何類型。key和token是服務(wù)器需要的額外信息。key是上傳到服務(wù)器的文件名,token是請求令牌。最后在用fetch提交請求的過程中FormData會幫助我們添加Http本身的Content-Type等信息。

let options = {};
options.body = formData;
options.method = "post";
return fetch(conf.UP_HOST, options).then((response) => {
});

這四行簡短的代碼幫助我們構(gòu)建了Http的Payload,并實(shí)際提交到上傳的服務(wù)器。實(shí)際返回的服務(wù)器端響應(yīng)客戶端需要處理,可以使用fetch的Promise API,非常方便

fetch(url).then((response) => {
return response.text();
}).then((responseText) => {
self.setState({info: responseText});
}).catch((error) => {
console.warn(error);
});

這里有個坑需要提醒一下,大家在debug返回響應(yīng)的時候會發(fā)現(xiàn)請求在一個Promise結(jié)束后不再進(jìn)入第二個Promise,再次發(fā)送請求,發(fā)現(xiàn)前面請求的Promise又繼續(xù)執(zhí)行下去。這其實(shí)是React Native Debugger的一個bug,大家忽略就可以了,在非debug模式就一切正常了。

有了以上知識我們就可以很容易的上傳文件到服務(wù)器了,這里有很多小伙伴會選擇類似七牛云存儲這種服務(wù)來加速開發(fā),根據(jù)七牛的官方文檔構(gòu)建token就可以上傳了,這里七牛也很貼心的推出了 React Native 平臺的SDK

使用SDK之后上傳文件就變的非常簡單了,首先是安裝

$ npm i react-native-qiniu --save

安裝之后配置自己的AK和SK,這個可以在個人中心里面找到

var qiniu = require("react-native-qiniu");
qiniu.conf.ACCESS_KEY = 
qiniu.conf.SECRET_KEY = 

這里我們再舉一個現(xiàn)實(shí)世界的例子,用戶在圖片庫中選擇圖片之后上傳到七牛云存儲,因?yàn)槟壳癛eact Native 官方還不支持從圖片庫,攝像頭等多個渠道獲取圖片,這里的代碼使用了另外一個開源庫
https://github.com/marcshilling/react-native-image-picker
完整demo:
https://github.com/buhe/present-demo/tree/master/presentdemo

七牛作為一家緊跟技術(shù)趨勢的云計(jì)算公司,從React Native發(fā)布以來就對該技術(shù)做了持續(xù)的跟進(jìn),在今年發(fā)布了官方版本的存儲SDK,幫助使用React Native創(chuàng)業(yè)的小伙伴們更便捷的使用七牛云存儲,降低研發(fā)成本支出、專注商業(yè)模式和技術(shù)創(chuàng)新。七牛云將持續(xù)發(fā)布服務(wù)于企業(yè)的云服務(wù),也會在第一時間發(fā)布React Native平臺的SDK,讓使用React Naitve的小伙伴在第一時間集成七牛云的最新服務(wù)。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/79324.html

相關(guān)文章

  • 11個React Native 組件庫和 Javascript 數(shù)據(jù)可視化庫

    摘要:數(shù)據(jù)可視化庫超過的的可能是最流行和最廣泛的數(shù)據(jù)可視化庫。是一組組件,用于高效地渲染大型列表和表格數(shù)據(jù)。一種優(yōu)雅而靈活的方式,可以利用組件來支持實(shí)際的數(shù)據(jù)可視化。 想閱讀更多優(yōu)質(zhì)文章請猛戳GitHub博客,一年百來篇優(yōu)質(zhì)文章等著你! React Native 組件庫 1. NativeBase showImg(https://segmentfault.com/img/bVbrLHH?w=...

    tangr206 評論0 收藏0
  • 淺談小程序運(yùn)行機(jī)制

    摘要:小程序的基礎(chǔ)庫不會被打包在某個小程序的代碼包里邊,它會被提前內(nèi)置在微信客戶端。小程序沒有重啟的概念當(dāng)小程序進(jìn)入后臺,客戶端會維持一段時間的運(yùn)行狀態(tài),超過一定時間后目前是分鐘會被微信主動銷毀當(dāng)短時間內(nèi)連續(xù)收到兩次 寫作背景 接觸小程序有一段時間了,總得來說小程序開發(fā)門檻比較低,但其中基本的運(yùn)行機(jī)制和原理還是要懂的。比如我在面試的時候問到一個關(guān)于小程序的問題,問小程序有window對象嗎?...

    Caicloud 評論0 收藏0
  • React Native 在 Airbnb(譯文)

    摘要:聲明有助于保持我們的同步與底層狀態(tài)的聲明性質(zhì)。值得注意的是,這些挑戰(zhàn)并非特定于。這導(dǎo)致或上出現(xiàn)不一致或意外錯誤。崩潰監(jiān)控我們使用在和上進(jìn)行崩潰報告。橋接有一個橋接,用于在本機(jī)和之間進(jìn)行通信。 showImg(https://segmentfault.com/img/bVbd0FA?w=740&h=433);在Android,iOS,Web和跨平臺框架的橫向?qū)Ρ戎校琑eact Nativ...

    nihao 評論0 收藏0

發(fā)表評論

0條評論

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