gpt4 book ai didi

c# - RestSharp AddFile 将多部分表单标题添加到文件

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

我正在使用 RestSharp 的 AddFile,它工作得很好,除了我的文件由于添加的这个头信息而最终被破坏。

-------------------------------28947758029299
Content-Disposition: form-data; name="user.png"; filename="user.png"
Content-Type: image/png

这只是我上传的一张测试图片。如果我从文件中删除这些行,那么它可以正常打开,否则它似乎已损坏。我可以在不添加这些东西的情况下使用 AddFile 吗?

当前代码:

string contentType = MimeMapping.GetMimeMapping("~/uploads/" + filename); //image/png etc
request.AddFile(filename, Server.MapPath("~") + "\\uploads\\" + filename, contentType);
IRestResponse response = client.Execute(request);

也试过同样的结果:

request.AddHeader("Content-Type", contentType);
byte[] bytes = File.ReadAllBytes(Server.MapPath("~") + "\\uploads\\" + filename);
request.AddBody(new {myFile = File.ReadAllBytes(Server.MapPath("~") + "\\uploads\\" + filename) });

还有这个(这里根本没有文件通过):编辑:这实际上有效

string contentType = MimeMapping.GetMimeMapping("~/uploads/" + filename);
byte[] bytes = File.ReadAllBytes(Server.MapPath("~") + "\\uploads\\" + filename);

request.AddHeader("Content-Type", contentType);
request.AddParameter(contentType, bytes, ParameterType.RequestBody);

IRestResponse response = client.Execute(request);

最佳答案

默认情况下,RestSharp 使用多部分表单数据发送文件,而您正在使用的 zendesk api(假设是这个 https://developer.zendesk.com/rest_api/docs/core/attachments#upload-files )并不期望如此,因此它还写入多部分边界标识符内容到上传的文件中。

这个答案https://stackoverflow.com/a/27994251/772973在另一个线程上应该可以解决您的问题。

更新

我只是将控制台应用程序与以下代码放在一起,以将 pdf 上传到我创建的 ASP.NET WebApi 项目,因为我无权访问 ZenDesk API

主要在program.cs中:

static void Main(string[] args)
{
RestRequest request = new RestRequest("values?fileName=test.pdf", Method.POST);

request.AddParameter("application /pdf", File.ReadAllBytes(@"C:\Temp\upload.pdf"), ParameterType.RequestBody);

var client = new RestClient(new Uri("http://localhost:55108/api"));

var response = client.Execute(request);

Console.ReadLine();
}

ValuesController.cs 中的代码

public async Task Post(string fileName)
{ static void Main(string[] args)
{
RestRequest request = new RestRequest("values?fileName=test.pdf", Method.POST);

request.AddParameter("application/pdf", File.ReadAllBytes(@"C:\Temp\upload.pdf"), ParameterType.RequestBody);

var client = new RestClient(new Uri("http://localhost:55108/api"));

var response = client.Execute(request);

Console.ReadLine();
}
var file = await this.Request.Content.ReadAsByteArrayAsync();
File.WriteAllBytes($"C:\\Uploaded\\{fileName}",file);
}

这上传了文件,它与原始文件相同,内容类型 header 设置为 application/pdf 而不是 multipart/form-data; boundary=----------------------------28947758029299

更新 2

在 program.cs 中添加了 Main 的实际代码

关于c# - RestSharp AddFile 将多部分表单标题添加到文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45379538/

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