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
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! :)