2015-04-07 105 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

取得进展没有:( –

相关问题