Development Tip

ASP.NET WebApi : WebApi HttpClient를 사용하여 파일 업로드로 멀티 파트 게시를 수행하는 방법

yourdevel 2020. 12. 14. 20:53
반응형

ASP.NET WebApi : WebApi HttpClient를 사용하여 파일 업로드로 멀티 파트 게시를 수행하는 방법


다음과 같은 간단한 양식에서 업로드를 처리하는 WebApi 서비스가 있습니다.

    <form action="/api/workitems" enctype="multipart/form-data" method="post">
        <input type="hidden" name="type" value="ExtractText" />
        <input type="file" name="FileForUpload" />
        <input type="submit" value="Run test" />
    </form>

그러나 HttpClient API를 사용하여 동일한 게시물을 시뮬레이션하는 방법을 알 수 없습니다. FormUrlEncodedContent비트는 간단 충분하지만, 내가 어떻게 게시물 이름으로 파일 내용을 추가하는 방법은 무엇입니까?


많은 시행 착오 끝에 실제로 작동하는 코드는 다음과 같습니다.

using (var client = new HttpClient())
{
    using (var content = new MultipartFormDataContent())
    {
        var values = new[]
        {
            new KeyValuePair<string, string>("Foo", "Bar"),
            new KeyValuePair<string, string>("More", "Less"),
        };

        foreach (var keyValuePair in values)
        {
            content.Add(new StringContent(keyValuePair.Value), keyValuePair.Key);
        }

        var fileContent = new ByteArrayContent(System.IO.File.ReadAllBytes(fileName));
        fileContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
        {
            FileName = "Foo.txt"
        };
        content.Add(fileContent);

        var requestUri = "/api/action";
        var result = client.PostAsync(requestUri, content).Result;
    }
}

의 다양한 하위 클래스를 찾아야합니다 HttpContent.

여러 형식의 http 콘텐츠를 만들고 여기에 다양한 부분을 추가합니다. 귀하의 경우에는 바이트 배열 내용이 있으며 다음 행을 따라 인코딩 된 URL 형식 이 있습니다 .

HttpClient c = new HttpClient();
var fileContent = new ByteArrayContent(new byte[100]);
fileContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
                                            {
                                                FileName = "myFilename.txt"
                                            };

var formData = new FormUrlEncodedContent(new[]
                                            {
                                                new KeyValuePair<string, string>("name", "ali"),
                                                new KeyValuePair<string, string>("title", "ostad")
                                            });


MultipartContent content = new MultipartContent();
content.Add(formData);
content.Add(fileContent);
c.PostAsync(myUrl, content);

귀하의 답변에 대해 @Michael Tepper에게 감사드립니다.

MailGun (이메일 제공 업체)에 첨부 파일을 게시해야했고 첨부 파일을 수락하도록 약간 수정해야했습니다.

var fileContent = new ByteArrayContent(System.IO.File.ReadAllBytes(fileName));
fileContent.Headers.ContentDisposition = 
        new ContentDispositionHeaderValue("form-data") //<- 'form-data' instead of 'attachment'
{
    Name = "attachment", // <- included line...
    FileName = "Foo.txt",
};
multipartFormDataContent.Add(fileContent);

Here for future reference. Thanks.

참고URL : https://stackoverflow.com/questions/10339877/asp-net-webapi-how-to-perform-a-multipart-post-with-file-upload-using-webapi-ht

반응형