Problem Area:
In one of my project, my requirement was to Post File along Complex object to server using AJAX.
I could not find ready made solution targeting both things in a single project so I decided to share this solution with you guys to try it out as well.
HTML:
<input type="file" id="uploadEditorImage" />
<input type="button" id="upload" value="upload" onclick="uploadImage()" />
Javascript:
function uploadImage()
{
var userObj = {};
userObj.userId = "123456";
var serializedObj = JSON.stringify(userObj);
var formData = new FormData();
formData.append('file', $('#uploadEditorImage')[0].files[0]);
formData.append('vm', serializedObj );
var _urlAction = '@Url.Action("Upload", "Home")';
$.ajax({
url: _urlAction,
type: 'POST',
data: formData,
processData: false,
contentType: false,
success: function (result) {
},
error: function (jqXHR) {
},
complete: function (jqXHR, status) {
}
});
}
MVC Controller:
[HttpPost]
public async Task<ActionResult> Upload(IFormFile file, string vm)
{
var uploadDirectoryPath = @"C:\";
var user = JsonConvert.DeserializeObject<UserFileVM>(vm);
if (file != null)
{
string filename = ContentDispositionHeaderValue.Parse(file.ContentDisposition).FileName.Trim('"');
using (FileStream output = System.IO.File.Create($@"{uploadDirectoryPath}{filename}"))
{
await file.CopyToAsync(output);
}
}
return Json("Success");
}
User View Model:
public class UserFileVM
{
public string UserId { get; set; }
}
Comments
Post a Comment