2013-02-19 76 views
3

我在這個問題上掙扎了好幾個小時,我找不到任何解決方案。 有人使用ServiceStack上傳一個POST請求的多個文件嗎?ServiceStack - 用一個POST請求發佈多個文件

我試圖用PostFile:

FileInfo fi = new FileInfo("ExampleData\\XmlAPI.xml"); 
    var client = new XmlServiceClient("http://localhost:1337"); 
    client.PostFile<DefaultResponse>("/test", fi, "application/xml"); 

但在這裏我可以只有一個文件添加到請求。 我的第二個鏡頭是使用LocalHttpWebRequestFilter,但裏面只有一個擴展方法,它也允許只發佈一個文件。

回答

2

多個文件上傳API已added to all .NET Service Clients in v4.0.54,允許您輕鬆地上傳一個HTTP請求中的多個流。它支持填充請求DTO與除多文件上傳數據流的查詢字符串和 POST'ed FORMDATA的任意組合:

using (var stream1 = uploadFile1.OpenRead()) 
using (var stream2 = uploadFile2.OpenRead()) 
{ 
    var client = new JsonServiceClient(baseUrl); 
    var response = client.PostFilesWithRequest<MultipleFileUploadResponse>(
     "/multi-fileuploads?CustomerId=123", 
     new MultipleFileUpload { CustomerName = "Foo,Bar" }, 
     new[] { 
      new UploadFile("upload1.png", stream1), 
      new UploadFile("upload2.png", stream2), 
     }); 
} 

或者只使用一個類型請求DTO。該JsonHttpClient還包括異步當量爲每個新 PostFilesWithRequest的API:

using (var stream1 = uploadFile1.OpenRead()) 
using (var stream2 = uploadFile2.OpenRead()) 
{ 
    var client = new JsonHttpClient(baseUrl); 
    var response = await client.PostFilesWithRequestAsync<MultipleFileUploadResponse>(
     new MultipleFileUpload { CustomerId = 123, CustomerName = "Foo,Bar" }, 
     new[] { 
      new UploadFile("upload1.png", stream1), 
      new UploadFile("upload2.png", stream2), 
     }); 
} 
+0

的老問題/答案新評論,但我發現[這個要點](https://gist.github.com/cakriwut/ fab729cad785047cc8f0),它將擴展方法添加到「ServiceClientBase」中,以便將多個文件與請求主體進行POST。看起來像作者手卷邏輯。 – jklemmack 2017-01-18 19:23:21

+0

@jklemmack thx的微調:)更新的答案,包括在v4.0.54中添加新的多文件上傳API。 – mythz 2017-01-18 19:29:17

+1

哦谷歌,你讓我失望了! *哭* * gnashes牙* – jklemmack 2017-01-18 19:30:23