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, но внутри есть только метод расширения, который также позволяет публиковать только один файл.

1 ответ

Решение

В версии 4.0.54 для всех клиентов.NET Service были добавлены несколько API загрузки файлов, что позволяет легко загружать несколько потоков в рамках одного HTTP-запроса. Он поддерживает заполнение Request DTO любой комбинацией QueryString и POST-формы 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),
        });
}
Другие вопросы по тегам