Search code examples
c#file-uploadazure-functionshttprequesthttpclient

send file using HttpClient in PostAsync using function app in req.Form.Files c#


I have created Function App for uploading multiple files on FTP server. I have received all files using req.Form.Files. but When I get the request. I actually found my file from HttpClient request in req.Body. When I upload file from Postman in Body->FormData it, works fine but now I need to send post request with file by code.

I had tried below code with reference of Sending a Post using HttpClient and the Server is seeing an empty Json file this link.

HttpContent content = new StreamContent (stream);
content.Headers.ContentType = new MediaTypeHeaderValue("multipart/form-data");
HttpResponseMessage response = client.PostAsync ("url", content).Result;

But I want file in req.Form.Files . Where user might have uploaded multiple files or one file.

Note : For now I have a file which is being generated by code. But it should not be saved on local so I'm trying to send stream. in HttpContent


Solution

  • Below are the steps for Post Async using function app

     public static async Task<IActionResult> Run(
                [HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = null)] HttpRequest req, ILogger log)
            {
                string Connection = Environment.GetEnvironmentVariable("AzureWebJobsStorage");
                string containerName = Environment.GetEnvironmentVariable("ContainerName");
                var file = req.Form.Files["File"];**
                var filecontent = file.OpenReadStream();
                var blobClient = new BlobContainerClient(Connection, containerName);
                var blob = blobClient.GetBlobClient(file.FileName);
                byte[] byteArray = Encoding.UTF8.GetBytes(filecontent.ToString());
    

    File details while using req.Form.Files

    enter image description here

    Successfully uploaded a text file to blob storage.

    enter image description here

    Edit:

    Here is the Post request Using HttpClient

     var file = @"C:\Users\...\Documents\test.txt";
            await using var stream = System.IO.File.OpenRead(file);
            using var request = new HttpRequestMessage(HttpMethod.Post, "file");
            using var content = new MultipartFormDataContent
             {
                { new StreamContent(stream),"File", "test.txt" }
             };
            request.Content = content;
            await client.SendAsync(request);
            return new OkObjectResult("File uploaded successfully");