通过html表单发送长文本字符串时遇到了一些麻烦。
我想将图像数据uri发送到php页面,可以处理数据并将其保存在MySQL中。
图像数据示例:
数据:图像/ GIF; BASE64,R0lGODlhEAAQAMQAAORHHOVSKudfO ..
数据来自我在页面上的剪贴板粘贴功能。
我在php页面上保存数据没有问题,但是将数据存入页面会带来麻烦。
下面的脚本是我尝试用来从客户端页面发送数据的脚本:
formData = new FormData();
formData.append('imagedata','data:image/gif;base64,R0lGODlhEAAQAMQAAORHHOVSKudfO..');
$.ajax({
url: "test.php?reportid=1",
type: "POST",
cache: false,
contentType: false,
processData: false,
data: formData
}).done(function(e){
alert(e);
});
如果图像尺寸很小,它可以正常工作,但如果我得到的图像大于250KB,则在帖子期间会丢失数据。
也许有人有更好的方式将数据发布到服务器?
答案 0 :(得分:2)
我找到了传输数据的替代方法。
使用: 用于将base64代码转换为blob的https://stackoverflow.com/a/5100158/3176569
function dataURItoBlob(dataURI) {
// convert base64/URLEncoded data component to raw binary data held in a string
var byteString;
if (dataURI.split(',')[0].indexOf('base64') >= 0)
byteString = atob(dataURI.split(',')[1]);
else
byteString = unescape(dataURI.split(',')[1]);
// separate out the mime component
var mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0];
// write the bytes of the string to a typed array
var ia = new Uint8Array(byteString.length);
for (var i = 0; i < byteString.length; i++) {
ia[i] = byteString.charCodeAt(i);
}
return new Blob([ia], {
type: mimeString
});
}
我将代码更改为:
formData = new FormData();
var blob = dataURItoBlob('data:image/gif;base64,R0lGODlhEAAQAMQAAORHHOVSKudfO..');
formData.append('imagedata', blob, 'temp.png');
var request = new XMLHttpRequest();
request.open("POST", "test.php?reportid=1");
request.send(formData);
然后在PHP页面上我通过$ _FILES [];
接收数据$file = $_FILES['imagedata'];
$filetype = $file['type'];
$blob = file_get_contents($file['tmp_name']);
之后,我可以将其插入MySQL数据库。
嗯,无论如何,谢谢回复和建议:)
答案 1 :(得分:-1)
尝试JSON.parse(&#39;数据:image / gif; base64,R0lGODlhEAAQAMQAAORHHOVSKudfO ..&#39;);