2015-04-07 9 views

risposta

1

Sono disponibili un paio di potenziali alternative. In primo luogo, è possibile utilizzare il polyfill XHR:

http://facebook.github.io/react-native/docs/network.html

In secondo luogo, chiediamo solo la domanda: come vorrei caricare un file in Obj-C? Rispondilo e poi potresti semplicemente implementare un native module per chiamarlo da JavaScript.

C'è qualche ulteriore discussione su tutto questo sul problema this Github.

26

C'è un caricamento di file integrato in React Native.

Example da Reagire codice nativo:

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

sto facendo qualcosa di simile utilizzando Axios .. .la get il server di meta-dati ma non il file vero e proprio. In che modo "uriFromCameraRoll" lo converte nel file come parte di "send"? – aginsburg

+0

'xhr' non fa parte della api nativa react, questo mi dà un errore' xhr is not defined' –

+1

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

0

risposta di Tom non ha funzionato per me. Così ho implementato un FilePickerModule nativo che mi aiuta a scegliere il file e quindi a usare il pacchetto react-native-file-transfer di remobile per caricarlo. FilePickerModule restituisce il percorso del file selezionato (FileURL) che viene utilizzato da react-native-file-transfer per caricarlo. Ecco il codice:

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

La mia soluzione sta usando prendere API e formdata.

Testato su 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

Non ci sono progressi nel recupero :( –

Problemi correlati