我是Reactjs的新手,我尝试从Reactjs组件上传多个图像,并在后端使用C# Web API,但每次我在Web API操作方法中获得Request.Form.Files计数=0时,我都能够上传图像;e图像,但现在尝试与多个和面临的问题,下面是组件代码:
import Header from './Header'
import { Button } from 'react-bootstrap'
import { useEffect, useState } from 'react';
function Add() {
const [productName, setProductName] = useState("");
const [productCode, setProductCode] = useState("");
const [productPrice, setProductPrice] = useState("");
const [productDescription, setProductDescription] = useState("");
const [productImage, setProductImage] = useState([]);
// useEffect(()=>{
// AddProduct();
// },[] )
async function AddProduct() {
// let data={productName, productCode, productPrice, productDescription}
const formData = new FormData();
for(let i=0;i<productImage.length;i++){
// console.log(productImage)
formData.append("productImage"+i, productImage);
}
// formData.append("productImage", productImage);
formData.append("productName", productName);
formData.append("productCode", productCode);
formData.append("productPrice", productPrice);
formData.append("productDescription", productDescription);
formData.append("userName",localStorage.getItem("UserName"));
console.warn("Sonu ", formData)
console.log(productImage)
let result = await fetch("https://localhost:44353/ApiProduct/AddProduct", {
method: "POST",
headers: {},
body: formData,
})
let response=await result.json();
if(response.status)
{
alert (response.successMessage)
}
else{
alert (response.errorMessage)
}
}
function onImageChange(e) {
setProductImage([...e.target.files]);
}
return (
<div>
<Header />
<h1>Add Product</h1>
<div className='col-6 offset-3' >
<input type="text" placeholder='productName' className='form-control' onChange={(e) => setProductName(e.target.value)} /><br /><br />
<input type="text" placeholder='productCode' className='form-control' onChange={(e) => setProductCode(e.target.value)} /><br /><br />
<input type="text" placeholder='productPrice' className='form-control' onChange={(e) => setProductPrice(e.target.value)} /><br /><br />
<input type="text" placeholder='productDescription' className='form-control' onChange={(e) => setProductDescription(e.target.value)} /><br /><br />
<input type="file" multiple accept=".jpg" className='form-control' onChange={(e) => onImageChange(e)} /><br /><br />
<Button onClick={AddProduct}>Add Products</Button>
</div>
</div>
);
}
export default Add;
以下是API代码。
public ResponseData AddProduct([FromForm] IList<IFormFile> files)
{
ProductModel productModel = new ProductModel();
if(files?.Any())
{
// Each time in my case files count is showing zero.
}
else
{
// other Logic
}
}
1条答案
按热度按时间cfh9epnr1#
我在后端使用了C#WebAPI,但是每次我在WEBAPI动作方法中得到Request.Form.Files计数= 0时,我都能够上传歌曲;e图像,但现在尝试与多个和面临的问题。
首先,当你发送请求到API控制器时,你应该匹配与你的控制器相同的参数名和你的
fromData
提交参数。在你的例子中,你的控制器参数名是files
,但是,你绑定了你的formData
参数为formData.append("productImage"+i, productImage);
,这是不正确的,导致提交时数据丢失。另外,不确定你说的
public ResponseData AddProduct
API控制器名称是什么意思。此外,这里是如何将图像列表从响应请求发送到www.example.com核心API控制器的完整示例。Asp.net core API controller.来自React中的数据绑定:
AddProduct(productImage)
,productImage
是我在选择图像时传递的每个图像,您需要在此处传递参数。此外,此处form.append('files', files);
文件是您的控制器参数,必须相应匹配。控制器:
输出: