Javascript 在React Js+中处理多个上载图像;将其发送到服务器
今天我上传图片时遇到了一些问题。我试图从我的前端上传2张图片,但在后端出现错误,在发送后,Javascript 在React Js+中处理多个上载图像;将其发送到服务器,javascript,node.js,reactjs,mongodb,ecmascript-6,Javascript,Node.js,Reactjs,Mongodb,Ecmascript 6,今天我上传图片时遇到了一些问题。我试图从我的前端上传2张图片,但在后端出现错误,在发送后,错误无法发送头。当我只上传一张图片时,我没有收到任何错误,但当我尝试上传两张图片时,我收到了错误。我需要做什么?我应该使用多部分/表单数据吗 我尝试使用多部分/表单数据,但没有成功 import {Link} from 'react-router-dom' class Category extends React.Component{ constructor(props){ sup
错误无法发送头。当我只上传一张图片时,我没有收到任何错误,但当我尝试上传两张图片时,我收到了错误。我需要做什么?我应该使用多部分/表单数据吗
我尝试使用多部分/表单数据,但没有成功
import {Link} from 'react-router-dom'
class Category extends React.Component{
constructor(props){
super(props);
this.state={
categoryId : this.props.match.params.id,
dataCategory:[],
categoryName:"",
categoryDesc:"",
categoryImage:"",
categoryImageCabor:"",
namaCabor :"",
descCabor :"",
imgCabor :"",
imageCabor : "",
selectedFile: null,
imagePreviewUrl :"",
file:""
}
this.handleSubmit = this.handleSubmit.bind(this);
this.handleChange = this.handleChange.bind(this);
this.imageHandleChange = this.imageHandleChange.bind(this);
}
componentWillMount(){
this.getDetailsData();
}
getDetailsData(i){
let categoryId = this.state.categoryId;
fetch(`http://localhost:4000/get/${categoryId}`).then(res =>{
if(res.status === 200)
return res.json().then(resCategoryId =>{
console.log(resCategoryId);
this.setState({
id : resCategoryId._id,
namaCabor : resCategoryId.namaCabor,
descCabor : resCategoryId.descCabor,
imgCabor : resCategoryId.imgCabor,
imageCabor : resCategoryId.imageCabor
});
});
}).catch(err =>{
if(err) console.log(err);
})
}
imageHandleChange(e){
e.preventDefault();
let reader = new FileReader();
let file = e.target.files[0];
reader.onloadend = () =>{
this.setState({
file : file,
imagePreviewUrl : reader.result
});
}
reader.readAsDataURL(file);
}
handleSubmit(e){
e.preventDefault();
let {imagePreviewUrl} = this.state;
const dataCategory = this.state.dataCategory;
let categoryName = this.refs.categoryName.value;
let categoryImage = this.refs.categoryImage.value;
let categoryDesc = this.refs.categoryDesc.value,
categoryImageCabor = (<img alt="www.google.com" height="100px" src={imagePreviewUrl} />),
namaCabor = this.refs.namaCabor.value,
descCabor = this.refs.descCabor.value,
imageCabor = (<img height="100px" src={this.state.imageCabor.props.src} />)
fetch('http://localhost:4000/add', {
mode:'cors',
method:'post',
headers:{
'Content-Type' : 'application/json',
"Accept" : "application/json",
"type" : "formData"
},
body:JSON.stringify({
categoryName : categoryName,
categoryDesc : categoryDesc,
categoryImage: categoryImage,
categoryImageCabor : categoryImageCabor,
namaCabor : namaCabor,
descCabor : descCabor,
imageCabor : imageCabor,
status : true
}),
}).then(res=>{
return res.json();
}).catch(function(err){
if(err){
console.log(err);
}
})
this.setState({
dataCategory : dataCategory,
imagePreviewUrl : false,
});
this.refs.myForm.reset();
this.refs.myForm.focus();
}
handleChange(e){
this.setState({
[e.target.categoryName] : e.target.value,
[e.target.categoryImage] : e.target.value,
[e.target.categoryDesc] : e.target.value
})
}
render(){
let {imagePreviewUrl} = this.state;
let $imagePreview = null;
if(imagePreviewUrl){
$imagePreview = (<img alt ="www.google.com" height="100px" src={imagePreviewUrl} />)
}
return this.state.imageCabor === "" ? <div></div> : (
<div>
<h3>Insert Category Cabang Olahraga </h3>
<form style={{marginTop: 10}} ref="myForm" onSubmit={this.handleSubmit} encType="multipart/form-data" >
<div className="form-group">
<label>Nama Category</label>
<input
name="categoryName"
type="text"
className="form-control"
ref="categoryName"
onChange={this.handleChange}
/>
</div>
<div className="form-group">
<label>Deskripsi Category </label>
<textarea
name="categoryDesc"
type="text"
className="form-control"
ref="categoryDesc"
rows="5"
onChange={this.handleChange}
/>
</div>
<div className="form-group">
<label>Upload Icon Image</label> <br />
<div>{$imagePreview}</div>
<input
name="categoryImage"
type="file"
ref="categoryImage"
className="image-control"
onChange={this.imageHandleChange}
/>
</div>
<h1>Cabang Olahraga</h1>
<div className ="form-group">
<label>Nama Cabang Olahraga</label>
<input
name="namaCabor"
type="text"
className="form-control"
ref="namaCabor"
value={this.state.namaCabor}
/>
</div>
<div className ="form-group">
<label>Deskripsi Cabang Olahraga</label>
<textarea
name="descCabor"
type="text"
className="form-control"
ref="descCabor"
rows="5"
value={this.state.descCabor}
/>
</div>
<div className="form-group">
<label>Icon Cabang Olahraga</label> <br />
<div><img height="100px" src={this.state.imageCabor.props.src} /></div>
</div>
<div className="form-group">
<input type="submit" value="Apply" className ="btn btn-primary" />
</div>
</form>
</div>
);
}
}
export default Category;
从'react router dom'导入{Link}
类类别扩展了React.Component{
建造师(道具){
超级(道具);
这个州={
categoryId:this.props.match.params.id,
数据类别:[],
类别名称:“”,
类别分类:,
类别图像:“”,
类别图像:,
纳马卡博尔:“,
描述:“,
imgCabor:“”,
imageCabor:“”,
selectedFile:null,
imagePreviewUrl:“”,
档案:“
}
this.handleSubmit=this.handleSubmit.bind(this);
this.handleChange=this.handleChange.bind(this);
this.imageHandleChange=this.imageHandleChange.bind(this);
}
组件willmount(){
这个.getDetailsData();
}
getDetailsData(一){
让categoryId=this.state.categoryId;
取回(`http://localhost:4000/get/${categoryId}`)。然后(res=>{
如果(资源状态===200)
返回res.json().then(resCategoryId=>{
console.log(resCategoryId);
这是我的国家({
id:resCategoryId.\u id,
namaCabor:resCategoryId.namaCabor,
descCabor:resCategoryId.descCabor,
imgCabor:resCategoryId.imgCabor,
imageCabor:resCategoryId.imageCabor
});
});
}).catch(错误=>{
if(err)console.log(err);
})
}
图像处理更改(e){
e、 预防默认值();
let reader=new FileReader();
让file=e.target.files[0];
reader.onloadend=()=>{
这是我的国家({
档案:档案,
imagePreviewUrl:reader.result
});
}
reader.readAsDataURL(文件);
}
handleSubmit(e){
e、 预防默认值();
设{imagePreviewUrl}=this.state;
const dataCategory=this.state.dataCategory;
让categoryName=this.refs.categoryName.value;
让categoryImage=this.refs.categoryImage.value;
设categoryDesc=this.refs.categoryDesc.value,
categoryImageCabor=(),
namaCabor=this.refs.namaCabor.value,
descCabor=this.refs.descCabor.value,
imageCabor=()
取('http://localhost:4000/add', {
模式:'cors',
方法:'post',
标题:{
“内容类型”:“应用程序/json”,
“接受”:“应用程序/json”,
“类型”:“formData”
},
正文:JSON.stringify({
categoryName:categoryName,
类别分类:类别分类,
类别图像:类别图像,
categoryImageCabor:categoryImageCabor,
纳马卡博尔:纳马卡博尔,
描述:描述,
imageCabor:imageCabor,
状态:正确
}),
})。然后(res=>{
返回res.json();
}).catch(函数(err){
如果(错误){
控制台日志(err);
}
})
这是我的国家({
dataCategory:dataCategory,
imagePreviewUrl:false,
});
this.refs.myForm.reset();
this.refs.myForm.focus();
}
手变(e){
这是我的国家({
[e.target.categoryName]:e.target.value,
[e.target.categoryImage]:e.target.value,
[e.target.categoryDesc]:e.target.value
})
}
render(){
设{imagePreviewUrl}=this.state;
让$imagePreview=null;
如果(imagePreviewUrl){
$imagePreview=()
}
返回this.state.imageCabor==“”?:(
插入卡邦·奥拉哈加类别
Nama类别
Deskripsi类别
上传图标图像
{$imagePreview}
卡邦奥拉哈加酒店
纳玛·卡邦·奥拉哈加
奥拉赫拉加卡邦酒店
图标卡邦奥拉哈拉加
);
}
}
导出默认类别;
在我的后端得到了输出。错误:发送邮件后无法设置邮件头。您需要使用类似以下的formData将formData提交到服务器
var formData = new FormData();
for (const file of this.state.files) {
formData.append('file', file)
formData.append('file2', file2)
formData.append('file3', file3)
}
或者你可以用简单的方式写
var formData = new FormData();
formData.append('file', file)
formData.append('file2', file2)
formData.append('file3', file3)
请根据您的代码进行相应更改
确保将标题也设置为multipart/formdata
干杯我认为托尼的回答很好,以下是我这边的几件事
要添加多个文件,请执行以下操作:
您需要为此使用formdata
var data = new FormData();
for (var x = 0; x < files.length; x++) {
data.append("files" + x, files[x]);
}
var data=new FormData();
对于(var x=0;x<