How to Upload Image Via WebApi

前端 未结 6 1016
忘了有多久
忘了有多久 2020-12-02 12:53

How I can upload Image File via ASP.NET Web API?
I have an input tag in File mode and it posted to API, how I can save it to server folder?
I tried th

6条回答
  •  伪装坚强ぢ
    2020-12-02 13:00

    Set this code (taken from http://www.c-sharpcorner.com/uploadfile/fc9f65/uploading-a-file-with-web-api-and-entity-framework-using-aja/) on the WEB API Post Controller:

        // POST: api/FileUploads
        [ResponseType(typeof(FileUpload))]
        public IHttpActionResult PostFileUpload()
        {
            if (HttpContext.Current.Request.Files.AllKeys.Any())
            {
                // Get the uploaded image from the Files collection  
                var httpPostedFile = HttpContext.Current.Request.Files["UploadedImage"];
                if (httpPostedFile != null)
                {
                    FileUpload imgupload = new FileUpload();
                    int length = httpPostedFile.ContentLength;
                    imgupload.imagedata = new byte[length]; //get imagedata  
                    httpPostedFile.InputStream.Read(imgupload.imagedata, 0, length);
                    imgupload.imagename = Path.GetFileName(httpPostedFile.FileName);
                    db.FileUploads.Add(imgupload);
                    db.SaveChanges();
                    // Make sure you provide Write permissions to destination folder
                    string sPath = @"C:\Users\xxxx\Documents\UploadedFiles";
                    var fileSavePath = Path.Combine(sPath, httpPostedFile.FileName);
                    // Save the uploaded file to "UploadedFiles" folder  
                    httpPostedFile.SaveAs(fileSavePath);
                    return Ok("Image Uploaded");
                }
            }
            return Ok("Image is not Uploaded"); 
        }
    

    On your UWP application, set the following method:

        using System;
        using System.Threading.Tasks;
        using Windows.Storage;
        using Windows.Storage.Streams;
        using Windows.Web.Http;
        // ...
        public static bool UploadImageToServer(StorageFile imageFile)
        {
            bool saveRes = false;
            try
            {
                using (HttpClient client = new HttpClient())
                {
                    if (client != null) // if no Network Connection
                    {
                        HttpResponseMessage response = new HttpResponseMessage();
                        Task task = Task.Run(async () =>
                        {
                            using (HttpMultipartFormDataContent formData = new HttpMultipartFormDataContent())
                            {
                                IBuffer buffer = await FileIO.ReadBufferAsync(imageFile);
                                HttpBufferContent WebHTTPContent = new HttpBufferContent(buffer);
                                formData.Add(WebHTTPContent, "UploadedImage", imageFile.Name);
                                response = await client.PostAsync(App.VehicleImageUri, formData);
                                if (response.IsSuccessStatusCode) saveRes = true;
                            }
                        });
                        task.Wait();
                    }
                }
            }
            catch (Exception em)
            {
               // Handle exception here ... 
            }
            return saveRes;
        }
    

    You call your method as follows:

    private async void CaptureImageByUser()
    {
        StorageFile file;
    
        // Create storage file in local app storage
        string fileName = GenerateNewFileName() + ".jpg";
        CreationCollisionOption collisionOption = CreationCollisionOption.GenerateUniqueName;
    
        file = await ApplicationData.Current.TemporaryFolder.CreateFileAsync(fileName, collisionOption);
    
        // Captures and stores new Jpeg image file
        await mediaCapture.CapturePhotoToStorageFileAsync(ImageEncodingProperties.CreateJpeg(), file);
        // Delete the file in the temporary location if successfully uploaded
        if (SaveDataByUser.UploadImageToServer(file)) await file.DeleteAsync();
    }
    
    private string GenerateNewFileName(string prefix = "IMG")
    {
        return prefix + "_" + DateTime.UtcNow.ToString("yyyy-MMM-dd_HH-mm-ss");
    }
    

    Hey, let me know if it works for you!! Happy to help! :)

提交回复
热议问题