【发布时间】:2021-06-21 21:35:29
【问题描述】:
我正在尝试使用 axios 上传图像,但它似乎总是为空,我无法修复它。发布请求通过 201 成功,但是当我发布请求表单前端时,这给出了空对象错误。我只是无法配置为什么会发生这种情况以及解决此问题的方法。
This is the error popup in the controller.
错误表示 ImageData 为空。我已将我的reactjs 代码连同此一起包含在内,以供您参考。
要提交的表单的一部分。
export default class Upload extends Component {
constructor(props) {
super(props);
const pharmacyName = this.props.location.pharmacyName;
this.state = {
Date_time: "",
Status: "",
Status2: "",
CustomerName: "",
PatientName: "",
PatientAge: 0,
Address: "",
Email: "",
TeleNo: 0,
Customer_id: 1,
Pharmacy_id: 1,
PharmacyName: pharmacyName ? pharmacyName : "",
ImageData: null,
Image:"",
ImageSource: "",
};
this.changeHandler = this.changeHandler.bind(this);
}
changeHandler = (e) => {
if (e.target.name === "ImageData") {
this.setState({
ImageData: URL.createObjectURL(e.target.files[0]),
});
} else {
this.setState({
[e.target.name]: e.target.value,
});
}
console.log("final payload", this.state)
};
submitHandler = (e) => {
console.log("e", e)
e.preventDefault();
console.log(this.state);
axios
.post('/api/Orders', this.state)
.then((response) => {
console.log(response);
})
.catch((error) => {
console.log(error);
});
};
render() {
const {
Date_time,
Status,
Status2,
CustomerName,
PatientName,
PatientAge,
Address,
Email,
TeleNo,
Customer_id,
Pharmacy_id,
ImageData,
} = this.state;
return (
<div className="outer">
<div className="inner2">
<form onSubmit={this.submitHandler}>
<h3>Upload Your Prescription Below</h3>
<input
type="file"
name="ImageData"
placeholder="Upload Your Prescription Here"
onChange={this.changeHandler}
/>
控制器:
public async Task<ActionResult<Order>> PostOrder([FromForm] Order order)
{
order.Image = await _iorderService.SaveImage(order.ImageData); //save image
_context.Order.Add(order);
await _context.SaveChangesAsync();
return StatusCode(201);
}
enter code here
模型类:
public class Order
{
[Key]
public int OrderID { get; set; }
public DateTime Date_time { get; set; }
public string Status { get; set; }
public string Status2 { get; set; }
public string PharmacyName { get; set; }
public string CustomerName { get; set; }
public string PatientName { get; set; }
public int PatientAge { get; set; }
public string Address { get; set; }
public string Email { get; set; }
public int TeleNo { get; set; }
public int Customer_id { get; set; }
public string Image { get; set;}
[NotMapped]
public IFormFile ImageData { get; set; }
[NotMapped]
public String ImageSource { get; set; }
//[ForeignKey("Pharmacy")]
public int Pharmacy_id { get; set; }
//public Pharmacy Pharmacy { get; set; }
}
}
OrderService.cs:
public class OrderService : IOrderService
{
private readonly IWebHostEnvironment _hostEnvironment;
public OrderService(IWebHostEnvironment hostEnvironment)
{
_hostEnvironment = hostEnvironment;
}
[NonAction]
public async Task<string> SaveImage(IFormFile ImageData)
{
string imageName = new string(Path.GetFileNameWithoutExtension(ImageData.FileName).Take(10).ToArray()).Replace(' ', '-');
imageName = imageName + DateTime.Now.ToString("yymmssfff") + Path.GetExtension(ImageData.FileName);
var imagePath = Path.Combine(_hostEnvironment.ContentRootPath, "Images", imageName);
using (var fileStream = new FileStream(imagePath, FileMode.Create))
{
await ImageData.CopyToAsync(fileStream);
}
return imageName;
}
[NonAction]
public void DeleteImage(String imageName)
{
var imagePath = Path.Combine(_hostEnvironment.ContentRootPath, "Images", imageName);
if (File.Exists(imagePath))
File.Delete(imagePath);
}
}
}
IOrderService.cs:
{
public interface IOrderService
{
Task<string> SaveImage(IFormFile ImageData);
void DeleteImage(String imageName);
}
}
【问题讨论】:
-
嗨,你到底是从哪里得到这个错误的?您的描述是说这发生在 React 代码中,但是您的错误屏幕截图显示了不同的代码,这不是 React 代码。 “ImageData”在这里传递了什么?
-
非常感谢您考虑我的问题。先生,此错误显示在此功能的控制器代码中。当我从前端发布请求时,此错误会在后端弹出。但是当我发布邮递员的请求时,没有任何问题。
标签: reactjs asp.net-core axios