2017-07-28 51 views
0

我正在使用RestSharp的AddFile,它的工作接近于正常,除了我的文件因为正在添加的头信息而最终破坏。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); 
+0

使用zendesk api,如果有人很好奇我在上传到 – abney317

回答

1

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

这个问题的答案https://stackoverflow.com/a/27994251/772973应该解决你的问题。

更新

我只是放在一起用下面的代码一个控制台应用程序在上传PDF到我创建为我没有访问的Zendesk API的ASP.NET的WebAPI项目

主要在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); 
} 

此上传的文件,它是相同的原始文件和内容类型报头被设置为application/pdf和不multipart/form-data; boundary=-----------------------------28947758029299

更新2

添加了实际用于主在Program.cs中代码

+0

这似乎与我上面的第二个例子非常相似。我试着用你在我上面的第三个例子中发布的内容进行了尝试,但是当我使用AddParameter时,文件上传并没有完全通过 – abney317

+0

了解了我上面发布的最后一件事情。有一些其他的代码搞乱了它。所以你第一次帮助我就够了。谢谢! – abney317

+0

好消息。不知道我在program.cs中的main示例代码发生了什么,所以编辑了答案并添加了它,以防将来有人需要这个例子 –