1
我正在开发一个Asp Core项目,并试图将Ajax文件发布到blob Javascript对象以将操作上传到Amazon S3。我尝试了几种不同的方式,并没有能够得到这个工作。它似乎是一个模型绑定问题。 当我仅仅通过字符串参数发送图片url到动作时,这个功能起作用,但我也需要文件名。Asp Core Ajax Post with ViewModel
问题:在动作模型对象为空
Ajax代码:
function pickit() {
//Start the filepicker
filepicker.pick(
{
//cropRatio: 4/3,
////cropMin: [200, 100],
//cropForce: true,
mimetype: 'image/*',
//services: ['CONVERT', 'COMPUTER', 'FACEBOOK', 'FLICKR', 'DROPBOX', 'INSTAGRAM', 'BOX', 'EVERNOTE', 'GMAIL', 'PICASA', 'IMAGE_SEARCH', 'FTP', 'GOOGLE_DRIVE', 'SKYDRIVE', 'URL', 'WEBCAM', 'CLOUDDRIVE', 'IMGUR', 'CLOUDAPP'],
conversions: ['crop', 'rotate', 'filter', 'scale']
},
function (Blob) {
$("#imagespinner").removeClass("invisible")
$.ajax({
type: "POST",
url: '@Url.Action("CreateImage","Photos")',
contentType: 'application/json',
dataType: "json",
data: JSON.stringify(Blob),
success: function (data, textStatus, jqXHR) {
$("#ImageURL").val(data);
var img = document.getElementById("imgImageURL");
img.src = data;
$("#imagespinner").addClass("invisible")
},
error: function (jqXHR, textStatus, error) {
alertify.alert(jqXHR.responseText);
$("#imagespinner").addClass("invisible")
}
});
setTimeout(function() { $('#image-loading-message').fadeOut() }, 500);
},
function (FPError) {
},
function (FPProgress) {
}
);
};
控制器动作:
[HttpPost]
public async Task<JsonResult> CreateImage(FilePickerViewModel model)
{
if (!String.IsNullOrWhiteSpace(model.url))
{
//Code to Upload to S3
return Json("ImageURL");
else
{
Response.StatusCode = 400;
return Json("Url is needed");
}
}
视图模型:
public class FilePickerViewModel
{
public Int32 id { get; set; }
public String url { get; set; }
public String filename { get; set; }
public Int32 size { get; set; }
public String client { get; set; }
public String mimetype { get; set; }
public Boolean isWriteable { get; set; }
}
感谢您的帮助
什么是Blob?在将其串联后,它看起来像什么? – Jasen
Blob是filepicker为上传的图像返回的javascript对象。字符串化看起来像{client:“computer”,filename:“foobar.jpg”,id:1,isWriteable:true,mimetype:“image/jpeg”,size:12345,url:“https://foobar.com/富“} –