将blob发送到ASP.NET Web API
我试图使用组件(slim image cropper)来裁剪图像,然后通过Web API将原始图像和裁剪版本发送到我的服务器。我的问题在于,我将数据作为Blob数组获取(第一个元素是原始数据,第二个元素是裁剪的),我完全不知道如何发送该数据,或者如何将其转换为能够将其发送给我API。将blob发送到ASP.NET Web API
我使用javascript函数而不是直接服务调用来传递更多参数,由组件支持并记录为here。
这里的功能:
var uploadImage = function (formdata, progress, success, failure) {
var originalArray;
var croppedArray;
var apiCall = function (original, cropped) {
var params = {
name: formdata[0].name,
original,
cropped,
id: $('hidId').val()
}
$.getJSON('/api/Test/UploadImage', params, function (response) {
if (response) {
if (response.Success == true) {
success('Upload réussi')
} else {
failure('Upload échoué')
}
} else {
failure('Pas de réponse de l\'API')
}
});
};
var originalReader = new FileReader();
originalReader.onloadend = function() {
originalArray = originalReader.result;
if (originalArray != null && croppedArray != null)
apiCall(originalArray, croppedArray);
};
originalReader.readAsArrayBuffer(formdata[0]);
var croppedReader = new FileReader();
croppedReader.onloadend = function() {
croppedArray = croppedReader.result;
if (originalArray != null && croppedArray != null)
apiCall(originalArray, croppedArray);
};
croppedReader.readAsArrayBuffer(formdata[1]);
}
我知道它必须寻找粗略的,但我没有经验,这种情况下,在所有。当我到达$ .getJSON(...)行时,控制台中出现404错误,显示只传递了“name”参数。
以防万一它是相关的,这是我的API方法签名:
public IHttpActionResult UploadImages(string name, byte[] original, byte[] cropped, Guid id)
{
...
}
我怎么能解决这个问题并发送图片? api端应该是什么参数类型?
您可以使用form
与enctype="multipart/form-data"
属性(你可以通过AJAX提交该表格)
并得到它作为HttpPostedFileBase类型的服务器端。
对于来自here采取例子:
<form action="" method="post" enctype="multipart/form-data">
<label for="file">Filename:</label>
<input type="file" name="file" id="file" />
<input type="submit" />
</form>
[HttpPost]
public ActionResult Index(HttpPostedFileBase file) {
if (file.ContentLength > 0) {
var fileName = Path.GetFileName(file.FileName);
var path = Path.Combine(Server.MapPath("~/App_Data/uploads"), fileName);
file.SaveAs(path);
}
return RedirectToAction("Index");
}
编辑
对于您可以使用输入的属性multiple="multiple"
和服务器端接受HttpPostedFileBase
集合像IEnumerable<HttpPostedFileBase>
多个文件。
<input type="file" multiple="multiple" name="files" id="files" />
我已经实现了这样的组件,问题是发送数据与常规窗体张贴只允许我得到裁剪的图像,而不是原来的。经过与组件的作者进行长时间的邮件交换(非常有帮助和反应性btw),结果是我只能通过ajax实现我想要的效果... – ZipionLive
仍然是upvoted,因为当你只需要裁剪版本时,它是一个有效的解决方案。但请注意,该文件然后作为json对象与base64图像数据传递,而不是HttpPostedFileBase。 – ZipionLive
您可以通过ajax提交表单,并且可以通过'multiple'属性拥有'file'类型的'input',这将允许用户选择多个文件。我之前完成了这项工作,它的效果很好 –
我通常以'form'具有'ENCTYPE =“多部分/格式数据”'属性(可以通过AJAX提交)做到这一点,在服务器侧接受它作为一个'HttpPostedFileBase'型https://msdn.microsoft.com/en-us/library/system.web.httppostedfilebase(v=vs.110).aspx –