2015-04-07 102 views

回答

26

在React Native中內置了文件上傳功能。

Example從陣營本地代碼:

var photo = { 
    uri: uriFromCameraRoll, 
    type: 'image/jpeg', 
    name: 'photo.jpg', 
}; 

var body = new FormData(); 
body.append('authToken', 'secret'); 
body.append('photo', photo); 
body.append('title', 'A beautiful photo!'); 

xhr.open('POST', serverURL); 
xhr.send(body); 
+5

我正在做類似的使用axios ..服務器得到的元數據,但不是實際的文件。 'uriFromCameraRoll'如何將其作爲'send'的一部分轉換爲文件? – aginsburg

+0

'xhr'不是反應原生api的一部分,這給了我一個'xhr沒有定義'的錯誤 –

+1

@JulianK嘗試:var xhr = new XMLHttpRequest(); https://facebook.github.io/react-native/docs/network.html#using-other-networking-libraries –

0

湯姆的回答並沒有爲我工作。所以我實現了一個本地FilePickerModule,它可以幫助我選擇文件,然後使用remobile的react-native-file-transfer包來上傳它。 FilePickerModule返回所選文件(FileURL)的路徑,它被react-native-file-transfer用於上載它。 下面的代碼:

var FileTransfer = require('@remobile/react-native-file-transfer'); 
var FilePickerModule = NativeModules.FilePickerModule; 

     var that = this; 
     var fileTransfer = new FileTransfer(); 
     FilePickerModule.chooseFile() 
     .then(function(fileURL){ 
     var options = {}; 
     options.fileKey = 'file'; 
     options.fileName = fileURL.substr(fileURL.lastIndexOf('/')+1); 
     options.mimeType = 'text/plain'; 
     var headers = { 
      'X-XSRF-TOKEN':that.state.token 
     }; 
     options.headers = headers; 
     var url = "Set the URL here" ; 
     fileTransfer.upload(fileURL, encodeURI(url),(result)=> 
     { 
       console.log(result); 
      }, (error)=>{ 
       console.log(error); 
      }, options); 
    }) 
13

我的解決方案是使用獲取API和FORMDATA。

在Android上測試。

const file = { 
    uri,    // e.g. 'file:///path/to/file/image123.jpg' 
    name,   // e.g. 'image123.jpg', 
    type    // e.g. 'image/jpg' 
} 

const body = new FormData() 
body.append('file', file) 

fetch(url, { 
    method: 'POST', 
    body 
}) 
+1

取得進展沒有:( –

相關問題