4

I want to create a WEB API that uploads a file from a given client onto a Azure. For this, I know I can use a class like: MultipartFormDataStreamProvider (not sure if this class works for Azure)

I want this API to be accessible from a variety of applications. For starters a simple .NET application. But my question is can I use this same API to handle file uploads from say an Android application, Windows 8 application, etc?

If this is not possible then do all these applications require a separate API exposed?

My idea of an API is that it can be used across a variety of applications for required functionality. But in this case the classes required to upload the file will restrict its usage.

2 Answers 2

3

Please find the below sample code to send multiple files to .Net web api via post method

.Net Web API method

   [HttpPost]
    public string SaveImage()
    {
       string uploadedfilelist="";
        if (((IList)HttpContext.Current.Request.Form.AllKeys).Contains("fileModel"))
        {
            var activity = JsonConvert.DeserializeObject<SocialCompanyPost>(HttpContext.Current.Request.Form["fileModel"]);

            var files = HttpContext.Current.Request.Files.Count > 0 ? HttpContext.Current.Request.Files : null;
            if (files != null && files.Count > 0)
            {
                 for (int i = 0; i < files.Count; i++)
                    {
                        if (files[i].ContentLength > 0)
                        {
                            try
                            {
                                var filepath = HttpContext.Current.Server.MapPath("~/Images/ServiceCenters/" + files[i].FileName);//, ms.ToArray());
                                files[i].SaveAs(filepath);
                                uploadedfilelist += files[i].FileName+",";
                            }
                            catch (Exception e)
                            {
                                Console.WriteLine(e);
                                throw;
                            }

                        }
                    }
            }
        }
        return uploadedfilelist;
    } 

Client side MVC application post method to call web api post method

    public string UploadImages(ServiceCenterPost socialCompany)
    {
        var url = "api/Images/SaveImage";
        if (socialCompany.ThumbnailUrlFileUpload.Count() > 0)
        {
            var fullURL = ConfigurationManager.AppSettings["ServiceApi"] + url;
            HttpClient client = new HttpClient();
            MultipartFormDataContent form = new MultipartFormDataContent();
            var stringContent = new StringContent(JsonConvert.SerializeObject(new SocialCompanyAdmin { CompanyCode = socialCompany.CompanyCode }));
            stringContent.Headers.Add("Content-Disposition", "form-data; name=\"fileModel\"");
            form.Add(stringContent, "json");
            //loop each files from file upload control
            foreach (var file in socialCompany.ThumbnailUrlFileUpload)
            {
                if (file != null && file.ContentLength > 0)
                {                        
                    var streamContent = new StreamContent(file.InputStream);
                    streamContent.Headers.Add("Content-Type", "application/octet-stream");
                    streamContent.Headers.Add("Content-Disposition", "form-data; name=\"file\"; filename=\"" + Path.GetFileName(file.FileName) + "\"");
                    form.Add(streamContent, "file", Path.GetFileName(file.FileName));
                }
            }
            client.DefaultRequestHeaders.Add("Authorization", "Bearer " + token);
            client.DefaultRequestHeaders.Add("Accept-Language", Language);
            var response = client.PostAsync(fullURL, form).Result;
            if (response.IsSuccessStatusCode)
            {
                    string modelObject = response.Content.ReadAsStringAsync().Result;
                    return JsonConvert.DeserializeObject<string>(modelObject);

            }              
        }
        return null;
    } 
Sign up to request clarification or add additional context in comments.

Comments

1

Web Api code to upload image

[System.Web.Http.AcceptVerbs("POST")]
        public async Task<object> AddAttachment()
        {
            if (!Request.Content.IsMimeMultipartContent("form-data"))
            {
                throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.UnsupportedMediaType));
            }

            NamedMultipartFormDataStreamProvider streamProvider = new NamedMultipartFormDataStreamProvider(
                HttpContext.Current.Server.MapPath("~/App_Data/"));

            await Request.Content.ReadAsMultipartAsync(streamProvider);
            string path = streamProvider.FileData.Select(entry => entry.LocalFileName).First();
            byte[] imgdata = System.IO.File.ReadAllBytes(path);

            return new
            {
                FileNames = streamProvider.FileData.Select(entry => entry.LocalFileName),

            };
        }

1 Comment

thanx for the code.But i already have this. I need to know whether this will work when i try to upload a file from say an Android App.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.