2015-05-27 22 views
9

Sto tentando di utilizzare un file di input reacst-start con jquery fileupload(). Con jQuery diritta vorrei fare $('#fileUpload').prop('files') per far passare i file alla chiamata fileupload. Tuttavia, non so come ottenere i file correttamente con react-bootstrap.Ottieni oggetto file dal file Ingresso

<Input type='file' label='Upload' accept='.txt' ref='fileUpload' buttonAfter={uploadFileButton}/> 
+0

@ Daniel ho usato la mia risposta qui sotto. Che problema stai avendo? –

+0

Vedere che non funziona per me: http://jsfiddle.net/danyaljj/b1fhnb6q/2/ – Daniel

+0

@Daniel Non è possibile accedere a this.refs al di fuori della classe di reazione 'Ciao'. Il tuo errore "Uncaught TypeError: Can not read property" fileUpload "di undefined" sta dicendo this.refs è undefined, non fileUpload. Devi inserire il riferimento in una funzione all'interno della classe, ad es. http://jsfiddle.net/0ttmh4hs/ –

risposta

14

L'attributo stringa di ref è considered legacy, e molto probabilmente sarà deprecato ad un certo punto in futuro. Il modo per farlo ora è con un ref callback. Di seguito ho dimostrato utilizzando una funzione di freccia ES6.

Cambia vostro elemento di ingresso:

<Input 
    type='file' label='Upload' accept='.txt' 
    buttonAfter={uploadFileButton} 
    ref={(ref) => this.fileUpload = ref} 
/> 

quindi è possibile utilizzare:

const file = this.fileUpload.files[0];

E così via.

+4

Hai qualche idea su come fare questo su un elemento FormControl, considerando che Input è deprecato? – Nift

+1

Questa dovrebbe essere la risposta accettata a causa delle nuove modifiche con React 15 :) – Sticky

8

È piuttosto semplice; Ho completamente perso questo:

var files = this.refs.fileUpload.getInputDOMNode().files; 
+0

Puoi condividere dove hai trovato questa risposta? Sto anche utilizzando React-Bootstrap per creare la mia app, ma è piuttosto difficile trovare risorse che insegnino come interagire con i dati usando react-bootstrap. – tet

+0

@ T.O Penso di aver capito da solo. Per la maggior parte dei miei problemi React, ho appena messo insieme le conoscenze di html, jquery, ecc. E le informazioni di base su React e bootstrap che ho trovato sui loro siti e su SO. –

+0

Oh, capisco. Grazie per la risposta. – tet

0

In aggiunta a fahad's answer, se non è possibile utilizzare una funzione freccia (a causa del supporto del browser precedente o per altri motivi), è necessario associare il contesto React alla funzione.

<Input type='file' label='Upload' accept='.txt' 
    buttonAfter={uploadFileButton} 
    ref={ function(ref) { this.fileUpload = ref }.bind(this) } 
/> 
0

Questo ha funzionato per me.

let file = this.refs.fileUpload.files [0];

1

ho risolto upload di file come questo per React-Bootstrap con un pulsante personalizzato alla ricerca:

addFile = (event: any): void => { 
    console.log(event.target.files[0]); 
} 

<FormGroup> 
    <ControlLabel htmlFor="fileUpload" style={{ cursor: "pointer" }}><h3><Label bsStyle="success">Add file</Label></h3> 
     <FormControl 
      id="fileUpload" 
      type="file" 
      accept=".pdf" 
      onChange={this.addFile} 
      style={{ display: "none" }} 
     /> 
    </ControlLabel> 
</FormGroup> 
Problemi correlati