gpt4 book ai didi

c# - 如何将 httppostedfile 发布到 webapi

转载 作者:太空狗 更新时间:2023-10-29 23:44:51 26 4
gpt4 key购买 nike

如何将 httppostedfile 发布到 webapi?基本上我希望用户选择一个 excel 文件并将其发布到我的 webapi。

gui 是用经典的 asp.net 制作的,webapi 是用新的 .NET apicontroller 制作的。

我之前已经完成了一些 api 编码,但后来我使用了 JSON,这似乎不太适用于这种对象。

谁能给我指出正确的方向,以便我可以继续搜索信息。现在我什至不知道要搜索什么。

最佳答案

我通过这样做解决了这个问题:在我的 Controller 中:

 using (var client = new HttpClient())
using (var content = new MultipartFormDataContent())
{
client.BaseAddress = new Uri(System.Configuration.ConfigurationManager.AppSettings["PAM_WebApi"]);
var fileContent = new ByteArrayContent(excelBytes);
fileContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
{
FileName = fileName
};
content.Add(fileContent);
var result = client.PostAsync("api/Product", content).Result;
}

这是我的 ApiController:

 [RoutePrefix("api/Product")]
public class ProductController : ApiController
{
public async Task<List<string>> PostAsync()
{
if (Request.Content.IsMimeMultipartContent())
{
string uploadPath = HttpContext.Current.Server.MapPath("~/uploads");
if (!System.IO.Directory.Exists(uploadPath))
{
System.IO.Directory.CreateDirectory(uploadPath);
}
MyStreamProvider streamProvider = new MyStreamProvider(uploadPath);

await Request.Content.ReadAsMultipartAsync(streamProvider);

List<string> messages = new List<string>();
foreach (var file in streamProvider.FileData)
{
FileInfo fi = new FileInfo(file.LocalFileName);
messages.Add("File uploaded as " + fi.FullName + " (" + fi.Length + " bytes)");
}

return messages;
}
else
{
HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.BadRequest, "Invalid Request!");
throw new HttpResponseException(response);
}
}
}

public class MyStreamProvider : MultipartFormDataStreamProvider
{
public MyStreamProvider(string uploadPath)
: base(uploadPath)
{

}

public override string GetLocalFileName(HttpContentHeaders headers)
{
string fileName = headers.ContentDisposition.FileName;
if (string.IsNullOrWhiteSpace(fileName))
{
fileName = Guid.NewGuid().ToString() + ".xls";
}
return fileName.Replace("\"", string.Empty);
}
}

我在一个教程中找到了这段代码,所以我不是值得信任的人。所以在这里我将文件写入一个文件夹。由于 mysreamprovider,我可以获得与我第一次在 GUI 中添加的文件同名的文件。我还将结尾“.xls”添加到文件中,因为我的程序将只处理 excel 文件。因此,我在我的 GUI 中为输入添加了一些验证,以便我知道添加的文件是一个 excel 文件。

关于c# - 如何将 httppostedfile 发布到 webapi,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30617752/

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