2017-01-03 4 views
0

ファイルをアップロードする簡単なフォームがあります。これは後で私のバックエンドのPythonコードで処理されます。しかし、ファイルをアップロードしようとすると、C:\ fakepath \ test.txtになります。reactjsを使ってファイルをアップロードし、C:/ fakepath/fileを扱います

私はこれをやり遂げたことから、これはセキュリティの問題から期待され、実行されました。これは問題ありませんが、今私の質問は、私がバックエンドでアップロードしているファイルを使用できるようにするために、世界中でどうすればよいのでしょうか?

私はさまざまな場所を見てきましたが、そのうちのどれもそれに対処していないようです。ここで

は私の現在のコードです:

class SomeForm extends Component{ 

    handleFile(e){ 
     this.setState({value: e.target.value}); 
    } 

    handleSubmit(e){ 
     var me=this; 
     if (this.state.value.length>0){ 
      var upload_file = this.state.value; 
      const request = axios.post(this.props.cfg_url+'/upload', {upload_file}) 
       .then(function(response){ 
       console.log('successfully uploaded', upload_file); 
      }) 

     } 
    } 

    render(){ 
     return(


      <Form inline onSubmit={this.handleSubmit}> 
         <FormGroup controlId='uploadFormId'> 
          <ControlLabel>Upload File:</ControlLabel> 
          <FormControl 
           type='file' 
           label='File' 
           onChange={this.props.onChange} 
          /> 
         </FormGroup> 
         <Button type='submit'>Upload</Button> 
        </Form> 
     ); 

    } 
} 
+0

なぜあなたはパスが必要なのでしょうか? – epascarello

+0

@epascarello私は物事のPython側でいくつかのファイル操作を行う必要があるため。だから私はそれを開く、読む、何かを書くのパスが必要です。私がしない限り、どのように教えてください – theJuls

+0

しかし、URLは、ファイルの詳細にアクセスする方法ではないファイルとは何の関係もありません。ファイルをサーバーに正しく送信していません。参照してください:http://stackoverflow.com/questions/2320069/jquery-ajax-file-upload – epascarello

答えて

2

あなたがvar upload_file = this.state.value;を行うなぜあなたはvar upload_file = this.state.value;を設定している場合、私は得ることはありませんが、あなたは(下の例では)状態オブジェクトでvalueを割り当てることはありません。

私はfilesの代わりにinput['file']valueプロパティを使用していると思います。 filesプロパティを使用して選択したファイルを取得し、FormData interfaceを使用してフォームパラメータをマップする必要があります。

class SomeForm extends Component { 

    handleSubmit(e){ 
     if (e.target.input.files.length) { 
      const upload_file = e.target.input.files[0]; 
      const formData = new FormData(); 
      formData.append('file', upload_file); 

      const request = axios.post(this.props.cfg_url+'/upload', formData) 
       .then(function(response){ 
        console.log('successfully uploaded', upload_file); 
       }); 
     } else { 
      console.log('You need to select a file'); 
     } 
    } 

    render(){ 
     return(
      <Form inline onSubmit={this.handleSubmit}> 
       <FormGroup controlId='uploadFormId'> 
        <ControlLabel>Upload File:</ControlLabel> 
        <FormControl 
         type='file' 
         name="input-file" 
         label='File' 
        /> 
       </FormGroup> 
       <Button type='submit'>Upload</Button> 
      </Form> 
     ); 
    } 
} 

Live Example

出典:https://github.com/mzabriskie/axios/tree/master/examples/upload

+0

私のupload_file変数に関する事は私がここで私のコードを書き直している間に間違っていたので、何百もの無関係な行がないでしょう。文脈外のもの。それについては申し訳ありません!私の悪い! とにかく、それを動作させるためにいくつかのフープにジャンプしなければならなかったが、全体的にこの部分は現在うまくいっている。ありがとう! – theJuls

関連する問題