问题描述
<input
accept="image/*"
className={classes.input}
id="icon-button-photo1"
onChange={(e) => onFileUpload(e)}
type="file"
caption="File1"
/>;
然后onFileUpload如下:
const onFileUpload = (e) => {
var file = e.target.files[0];
const fs = require("fs");
var rp = require("request-promise");
var options = {
method: "POST",uri: "http://127.0.0.1:9000/api/get_file/",formData: {
// Like <input type="text" name="name">
name: "Jenn",// Like <input type="file" name="file">
file: {
value: fs.createReadStream(file),options: {
filename: file.name,contentType: "image/jpg",},headers: {
/* 'content-type': 'multipart/form-data' */
// Is set automatically
},};
rp(options)
.then(function (body) {
// POST succeeded...
})
.catch(function (err) {
// POST Failed...
});
};
TypeError: fs.createReadStream is not a function
有人可以给我任何线索来提出正确的代码吗?
解决方法
您只需要创建一个FormData对象即可完成此操作,如Evan Trimboli所说!
在此代码示例中,使用FormData和fetchAPI发出带有promise的请求。
const onFileUpload = (e) => {
var file = e.target.files[0];
var formData = new FormData();
formData.append("name","Jenn");
// HTML file input,chosen by user
formData.append("file",file );
// If you want to use any header
var myHeaders = new Headers();
var myInit = { method: 'POST',headers: myHeaders,mode: 'cors',cache: 'default' };
fetch('http://127.0.0.1:9000/api/get_file/',myInit)
.then(function(response) {
return response.json();
})
.then(function(responseJson) {
// POST succeeded...
console.log('Upload succeeded')
})
.catch(function (err) {
// POST failed...
console.log('Upload failed:',err)
});
};