前端将图片转换为base64位,使用ajax传递到后台,但是图片经过base64转换成字符串后非常长,无法使用ajax

前端将图片转换为base64位,使用ajax传递到后台,但是图片经过base64转换成字符串后非常长,在使用ajax传递时就出现问题,请问有什么解决办法吗?... 前端将图片转换为base64位,使用ajax传递到后台,但是图片经过base64转换成字符串后非常长,在使用ajax传递时就出现问题,请问有什么解决办法吗? 展开
 我来答
heightev
2016-05-25 · TA获得超过643个赞
知道小有建树答主
回答量:310
采纳率:100%
帮助的人:146万
展开全部
前端JS
var reader = new FileReader();
reader.onload = function (e) {
//图片base64数据
var imgBase64Data = e.target.result;
var pos = imgBase64Data.indexOf("4")+2;
imgBase64Data = imgBase64Data.substring(pos, imgBase64Data.length - pos);//去掉Base64:开头的标识字符
$.ajax({
type: "POST",
url: "http://imginapi.com/image/AddImage",
async: false,
xhrFields: { withCredentials: true },
data: { 'base64StrImgData': imgBase64Data, 'imgFormat': fileext},
dataType: "text",
success: function (data) {
alert(data);
domUtils.on(iframe, 'load', callback);
},

error: function (err) {
alert("error");
alert(err.responseText);
}

});
return;

};
reader.readAsDataURL(input.files[0]);

后台C#代码:
/// <summary>
/// 图像转换为Base64编码
/// </summary>
/// <param name="image">图像</param>
/// <param name="format">图像格式</param>
/// <param name="throwException">出现异常时是否抛出</param>
/// <returns>转换成功返回其Base64编码;失败返回空串</returns>
public static string ImageToBase64(System.Drawing.Image image, ImageFormat format, OPResult opRes, bool throwException = false)
{
return ExceptionHelper.ExceptionRecord(() =>
{
string base64String = "";
try
{
using (MemoryStream ms = new MemoryStream())
{
image.Save(ms, format);
byte[] imageBytes = ms.ToArray();
base64String = Convert.ToBase64String(imageBytes);
}
}
catch (Exception ex)
{
throw new Exception("将图片转成base64字符串时出现异常:" + ex);
}

return base64String;
}, opRes, throwException);
}
百度网友bfd78fd
2018-03-30 · TA获得超过1814个赞
知道小有建树答主
回答量:0
采纳率:0%
帮助的人:0
展开全部

前端生成的代码最终格式如下:

data:image/png;base64,xxxxxxxxxx...........

后端这样解码

base64=base64.Replace("data:image/png;base64,", "");

byte[] bytes =Convert.FromBase64String(base64);

MemoryStream memStream = new MemoryStream(bytes);

BinaryFormatter binFormatter = new BinaryFormatter;

return(System.Drawing.Image)binFormatter.Deserialize(memStream);

string base64Str = "图片的BASE64字符串";

byte[] bytes = System.Convert.FromBase64String(base64Str);

using (System.IO.MemoryStream ms = new System.IO.MemoryStream(bytes))

{return System.Drawing.Image.FromStream(ms);}

ajax({,url : form.action,,type : "POST",,data : formData,

dataType:"text",,processData : false,,success:function(data).window.location.href="${ctx}"+data;

xhr:function//在jquery函数中直接使用ajax的XMLHttpRequest对象

var xhr = new XMLHttpRequest

xhr.upload.addEventListener

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友a615581
推荐于2018-05-03
知道答主
回答量:2
采纳率:0%
帮助的人:1892
展开全部
如果你用的是tomcat 报request header too large 的错,就在tomcat的config/server.xml里设置最大头大小
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
暴雨摘花针
2018-05-03
知道答主
回答量:22
采纳率:40%
帮助的人:8.4万
展开全部
非得用ajax吗
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
清河大侠
2018-05-01 · TA获得超过1.3万个赞
知道大有可为答主
回答量:1.6万
采纳率:69%
帮助的人:1207万
展开全部

有一别人的解决类似情况的链接,也许对你有帮助:

ajax的post提交参数长度超出限制的解决办法

可以看看是否有帮助。如果有需要,请继续交流(有段时间没有用ajax之类的东西了,有些生疏)。谢谢

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式