c# - 在 POST 请求中发送文件和元数据信息 ajax .NET core api 2.1
问题描述
我正在尝试通过 API 上传文件,但我还想将上下文信息添加到图像的上传中。我无法访问控制器本身。我收到以下错误:
应用程序在未阅读整个请求正文的情况下完成。
我读到这个错误可能是由于格式错误
我已成功上传文件并将其保存在我的计算机上,现在我希望能够接收文件和额外信息以对我的数据库发出查询请求。
我制作了一个应该可以工作的模型,但它没有。也许有人知道我做错了什么。
我相信存在输入格式错误。我不知道我怎么能找到确切的格式错误,因为考虑到它甚至不会进入控制器上下文,我不能做断点。
模型:
public class InfoPacket
{
public string ExtraInfoTest{ get; set; }
public List<IFormFile> files { get; set; }
}// end packet
控制器:
[HttpPost]
[Route("uploadInformation")]
public void uploadImages(InfoPacket packet)
{
for (int i = 0; i < packet.files.Count; i++)
{
//Get extension of the image
string stride = Path.GetExtension(packet.files[i].FileName);
//Get unique name for file
var uniqueFileName = $@"{Guid.NewGuid()}" + stride;
//Prepare saving path
string savePath = "C:\\test\\" + uniqueFileName;
using (var fileStream = new FileStream(savePath, FileMode.Create))
{
packet.files[i].CopyTo(fileStream);
fileStream.Close();
}
}// end forloop
}// end function
JS/ajax 请求:
function uploadFiles(inputId) {
var input = document.getElementById(inputId);
var files = input.files;
var packet = new FormData();
packet.append("ExtraInfoTest", "Test");
for (var i = 0; i != files.length; i++) {
packet.append("files", files[i]);
console.log(files[i]);
}
$.ajax(
{
url: "https://localhost:5001/api/images/uploadInformation",
data: packet,
processData: false,
contentType: false,
type: "POST",
success: function (data) {
console.log("Files Uploaded!");
},
error: function (data) {
console.log(data, "error")
}
}
);
}
HTML 代码:
<input id="files" name="files" type="file" size="1" multiple />
<button onclick="uploadFiles('files')"> submit</button>
现在的目标是能够访问控制器(获取正确的输入格式,其余的应该很容易)。
解决方案
尝试使用[FromForm]
attribute ,您的代码在我的测试中按预期工作:
public void uploadImages([FromForm]InfoPacket packet)
推荐阅读
- javascript - 图像未插入弹簧靴
- python - 如何使用flask框架将数据发送到html工作表
- node.js - 异步等待所有承诺
- c# - BigQuery 流式插入 - 估计插入大小以避免超出限制
- bootstrap-4 - 整行的垂直内容对齐
- xml - 点燃身份验证值显示“关闭”,但已启用
- javascript - 更改 AngularJS 中的嵌套对象值会更改所有其他值
- python - 如何将本地 mysql 数据库上传到 heroku 应用程序?
- java - 应用了java AtomicInteger accumAndGet
- angular - 转换为 PWA 后,我们的网站是否可以移动访问?