2017-07-28 15 views
0

RestSharpのAddFileを使用していますが、追加されるこのヘッダー情報のためにファイルが壊れてしまうことを除いて、正常に近い状態です。RestSharp AddFileファイルに複数のフォームのヘッダーを追加する

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

これは私がアップロードした単なるテスト画像でした。私はファイルからこれらの行を削除する場合はそれが正常に開き、それ以外の場合は壊れているようです。 AddFileを追加しなくてもAddFileを使用できますか?

現在のコード:(どのファイルがまったくここを通り抜けたん)また、この

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); //image/png etc 
request.AddFile(filename, Server.MapPath("~") + "\\uploads\\" + filename, contentType); 
IRestResponse response = client.Execute(request); 

編集:これは実際に

を働きました
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

誰かが私が – abney317

答えて

1

RestSharpは、デフォルトでファイルを送信していますgマルチパートのフォームデータと使用しているzendesk api(これはthisだとします)を期待していないので、コンテンツからアップロードされたファイルにマルチパート境界識別子を書き込んでいます。

この回答のhttps://stackoverflow.com/a/27994251/772973はこの問題を解決するはずです。

更新

私はちょうど私がZenDeskのAPI

へのアクセス権を持っていないように私が作成したASP.NET WEBAPIプロジェクトへのPDFファイルをアップロードすることで、次のコードと一緒にコンソールアプリを入れてProgram.csの中

メイン:ValuesController.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(); 
} 

コード

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); 
} 

これはそれのProgram.csにおける主用multipart/form-data; boundary=-----------------------------28947758029299

アップデート2

追加された実際のコードapplication/pdfに設定された元のファイルとContent-Typeヘッダと同一ではなく、ファイルをアップロード

+0

にアップロードしているものが不思議であれば、zendesk apiを使用してください。これは上記の2番目の例と非常によく似ています。上記の私の3番目の例で投稿したものを試してみましたが、AddParameterを使用したときにファイルのアップロードが全く行われませんでした。 – abney317

+0

最後に取り上げたものを手に入れました。それを台無しにしていた他のコードがいくつかありました。それで、あなたは初めての私の助けとなりました。ありがとう! – abney317

+0

優れたニュース。 program.csのmainのサンプルコードに何があったのか分からないので、答えを編集して、将来的にその例が必要な場合に追加しました –

関連する問題