POST StreamContent with multiple files

The following is a snippet of HttpPosts code for a single file in WebAPI. I would like to expand it to create a StreamContent containing multiple files (similar to Fiddler multi-user posts).

I know that I have to add a “border” to StreamContent, but I don’t know exactly where. I would like to eventually convert the FileStream / Stream parameters to a list so that I can iterate through the collection and create a StreamContent for POST.

Let me know if this message makes sense. I would appreciate any suggestions.

Thanks in advance!

public async Task<HttpStatusCode> UploadOrderFile(FileStream imageFileStream, string filename, string contentType = "image/png")
    {
        JsonApiClient._client.DefaultRequestHeaders.Clear();
        var content = new MultipartFormDataContent
        {
            JsonApiClient.CreateFileContent(imageFileStream, filename, contentType)
        };
        JsonApiClient._client.DefaultRequestHeaders.Add("Authorization",
            " Bearer " + JsonApiClient.Token.AccessToken);
        var response = await JsonApiClient._client.PostAsync("api/UploadFile", content);

        response.EnsureSuccessStatusCode();
        return response.StatusCode;
    }

internal static StreamContent CreateFileContent(Stream stream, string fileName, string contentType)
    {
        var fileContent = new StreamContent(stream);
        fileContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("form-data")
        {
            Name = "\"files\"",
            FileName = "\"" + fileName + "\""
        }; 
        fileContent.Headers.ContentType = new MediaTypeHeaderValue(contentType);
        return fileContent;
    }

EDIT: I have no problem getting and saving published files. The problem is creating the StreamContent needed to publish multiple files.

+3
2

, , . CreateFileContent . , MultiPartFormDataContent StreamContent. ​​ MultipartFormDataContent. -, , . !

public async Task<HttpStatusCode> UploadOrderFile(List<FileStream> imageFileStream, List<string> filename, string salesOrderNo, List<string> contentType)
    {
        JsonApiClient._client.DefaultRequestHeaders.Clear();
        var boundary = "---------------------------" + DateTime.Now.Ticks.ToString("x", NumberFormatInfo.InvariantInfo);
        var content = new MultipartFormDataContent(boundary); 
        for (var i = 0; i < imageFileStream.Count; i++)
        {
            content.Add(JsonApiClient.CreateFileContent(imageFileStream[i], filename[i], contentType[i]));
        }

        JsonApiClient._client.DefaultRequestHeaders.Add("Authorization",
            " Bearer " + JsonApiClient.Token.AccessToken);
        var response = await JsonApiClient._client.PostAsync("api/UploadFile", content);

        response.EnsureSuccessStatusCode();
        return response.StatusCode;
    }

internal static StreamContent CreateFileContent(Stream stream, string fileName, string contentType)
{
    var fileContent = new StreamContent(stream);
    fileContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("form-data")
    {
        Name = "\"files\"",
        FileName = "\"" + fileName + "\""
    }; 
    fileContent.Headers.ContentType = new MediaTypeHeaderValue(contentType);
    return fileContent;
}
+2

     public HttpResponseMessage Post()
        {
            var httpRequest = HttpContext.Current.Request;
            if (httpRequest.Files.Count > 0)
            {
                foreach(string file in httpRequest.Files)
                {                   
 var content = new MultipartFormDataContent
        {
            JsonApiClient.CreateFileContent(postedFile.InputStream, postedFile.FileName, postedFile.ContentType)
        };
                 // NOTE: To store in memory use postedFile.InputStream
                }

                return Request.CreateResponse(HttpStatusCode.Created);
            }

            return Request.CreateResponse(HttpStatusCode.BadRequest);
        }


    internal static StreamContent CreateFileContent(Stream stream, string fileName, string contentType)
        {
            var fileContent = new StreamContent(stream);
            fileContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("form-data")
            {
                Name = "\"files\"",
                FileName = "\"" + fileName + "\""
            }; 
            fileContent.Headers.ContentType = new MediaTypeHeaderValue(contentType);
            return fileContent;
        }
+1

Source: https://habr.com/ru/post/1684715/


All Articles