gpt4 book ai didi

c# - 将文件上传到 Web API

转载 作者:行者123 更新时间:2023-11-30 23:08:10 24 4
gpt4 key购买 nike

我有以下模型:

public class FileModel
{
public byte[] FileData{get;set;}
public string FileName {get;set;}
}

我编写了我的 Web 应用程序使用的私有(private) Web API 服务。当用户上传文件时,我将这些文件转换为字节数组,并发送 List<FileModel>从 C# 代码(不是从 HTML 页面,因为我的 Web API 对我的网站是私有(private)的)到我的 Web API,它保存我的文件并返回结果。

网络 API 方法:

[HttpPost]
public UploadFiles(List<FileModel> files)
{
// Do work
}

如果我上传许多大文件,上面的代码就会中断 - 代码无法序列化大文件' FileModel s 因为它们超过了最大序列化长度。

我该如何解决这个问题?有没有其他方法可以在不向用户公开文件的情况下将文件上传到 Web API?

最佳答案

这是针对这种情况的一些解决方案。

如代码片段所示,您的 Controller 操作将不接受任何参数。

public async Task<HttpResponseMessage> PostByteArrayAsync()
{
string root = HttpContext.Current.Server.MapPath("~/folder");
var provider = new MultipartFormDataStreamProvider(root);
await Request.Content.ReadAsMultipartAsync(provider);
foreach (var file in provider.FileData)
{
var buffer = File.ReadAllBytes(file.LocalFileName);
// store to db and other stuff
}
return Ok();
}

以及上面的前端示例代码。

UploadData(event) {
this.setState({ loading: true });
event.preventDefault();
let data = new FormData();
let fileData = document.querySelector('input[type="file"]').files[0];
data.append("data", fileData);
let that = this;
fetch("api/upload", {
method: "POST",
"Content-Type": "multipart/form-data",
"Accept": "application/json",
body: data
}).then(function (res) {
if (res.ok) {
call('api', 'GET').then(response => { response.error ? response.message : that.props.change(response); that.setState({ loading: false }) });
}
else {
that.setState({ loading: false });
that.failedMsg();
}
})
}

关于c# - 将文件上传到 Web API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46709377/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com