簡體   English   中英

以反應形式上傳文件

[英]Upload a file in a form in react

我想通過獲取api上傳文件。 但是,我的formData()返回空。

var formData = new FormData();
data.append("file", file[0]);

const options = {
    method: 'POST',
    headers: {...},
    body: formData
}

fetch("url", options)
    .then(resp => resp.json())
    .then(result => ... );

有我的表格:

<form onSubmit={this.handleSubmit()}>
    upload file
    <button type="submit"></button>
</form> 

我認為您正在尋找的是:

formData.set('file', file[0])

您可以在formData內部看到的方式是這樣的:

for (var pair of formData.entries()) {
  console.log(pair[0]+ ', '+ pair[1]);
}

你可以試試:

var formData = new FormData();

for (var key in files) {
  formData.append("file", file[0]);
}

這是我之前在React.Component類中編寫的兩個函數:

var formData = new FormData();

handleFileUpload = files => {
  var chosenData = new FormData();
  var allFiles = [];
  for (var key in files) {
    if (!isNaN(key)) {
      chosenData.append("document", files[key].name);
    }
  }
  for (var pair of chosenData.entries()) {
    allFiles.push(pair[1]);
  }
  this.setState({ chosenFiles: allFiles });
  for (var obj in files) {
    if (!isNaN(obj)) {
      formData.append("document", files[obj]);
    }
  }
};

buttonClicked = e => {
  e.preventDefault();
  var newData = [];
  var newFormData = new FormData();
  if (
    this.state.chosenFiles.length !== formData.getAll("document").length
  ) {
    newData = formData
      .getAll("document")
      .slice(-this.state.chosenFiles.length);
    for (var obj = 0; obj < newData.length; obj++) {
      newFormData.append("document", newData[obj]);
    }
    this.fileUploader(newFormData);
  } else {
    this.fileUploader(formData);
  }
};

在我的渲染中:

<div id="selectFiles">
<label id="docFileLabel" htmlFor="docFile">
    Upload
  </label>
  <input
    type="file"
    id="docFile"
    className="docFile"
    onChange={e => {
      this.handleFileUpload(e.target.files, e);
    }}
    multiple
  />
</div>

樣本圖片:

在此處輸入圖片說明

另一個示例圖像:

在此處輸入圖片說明

data.append(“ file”,file [0]); 應該是formData.append(“ file”,file [0]);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM