我试图通过其内容在MVC控制器中上传图片。
$scope.imageUpload = function (event) {
var files = event.target.files; //FileList object
fileString = event.target.files[0];
for (var i = 0; i < files.length; i++) {
var file = files[i];
var reader = new FileReader();
reader.onload = $scope.imageIsLoaded;
reader.readAsDataURL(file);
}
}
$scope.imageIsLoaded = function (e) {
$scope.$apply(function () {
$scope.userProfilePic = e.target.result;
$.ajax({
url: "FileUploadWithAjax",
type: "POST",
data: 'imageString=' + e.target.result.split(',')[1],
processData: false
});
});
}
加载图像后,我将其内容发送给MVC控制器。
[System.Web.Mvc.HttpPost]
public void FileUploadWithAjax([FromBody]string imageString)
{
bytes = Convert.FromBase64String(imageString);
using (MemoryStream ms = new MemoryStream(bytes))
{
Image image = Image.FromStream(ms);
image.Save("myBlargyImage.jpg");
}
}
但是从流中创建图像时它会破碎。 它会抛出一个名为&#34; Invalid parameter&#34;。
的错误类型&#39; System.ArgumentException&#39;的例外情况发生在 System.Drawing.dll但未在用户代码中处理
附加信息:参数无效。
堆栈跟踪
at System.Drawing.Image.FromStream(Stream stream,Boolean useEmbeddedColorManagement,Boolean validateImageData)at System.Drawing.Image.FromStream(Stream stream)at Micraft.BBraun.Controllers.EmployeeController.FileUploadWithAjax(字符串 imageString)在D:\ B Braun \ mvc 31 JAN 2017 \ Micraft.BBraun \ Controllers \ EmployeeController.cs:第351行 lambda_method(Closure,ControllerBase,Object [])at System.Web.Mvc.ActionMethodDispatcher&LT;&GT; c__DisplayClass1.b__0(ControllerBase controller,Object []参数)at System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller,Object []参数)at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext,IDictionary
2 parameters) at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary
2 参数)at System.Web.Mvc.Async.AsyncControllerActionInvoker.b__39(IAsyncResult的 asyncResult,ActionInvocation innerInvokeState)at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult2.CallEndDelegate(IAsyncResult asyncResult) at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase
1.End() 在 System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult的 asyncResult)at System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.b__3d() 在 System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters&LT;&GT; c__DisplayClass46.b__3f()
更新
我只是检查可以从base64string生成图像的在线工具 http://codebeautify.org/base64-to-image-converter
当我在html中复制源文件中的图像文本时,我能够在上面的网站上生成图像。
之后,我尝试复制我在服务器端方法获得的图像内容,令人惊讶的是我无法生成图像。
然后我比较了两篇文章,发现了一些不同之处
如果你仔细检查下面的图像,我可以看到一些变化,比如那里的任何地方&#34; +&#34;登录图像内容,将其替换为&#34;空格&#34;。
是否有任何我在将此数据发布到服务器时应该使用的内容类型?
答案 0 :(得分:0)
您需要对发送到服务器的数据使用encodeURIComponent()
。因此,在您的ajax请求中,请执行以下操作:
data: 'imageString=' + encodeURIComponent(e.target.result.split(',')[1]),