张贴base64数据JavaScript/jQuery
POSTing base64 data JavaScript/jQuery
我正在开发一个网站,该网站允许用户编辑照片(在浏览器中),然后上传。为了在浏览器中编辑图像,我使用了一些在base64中处理图像的JavaScript库。因此,要将图像POST到我的服务器,不能使用带有文件输入的简单表单。隐藏输入的值设置为已编辑图像的base64字符串,该字符串为POSTed。请参阅下面的简短示例。
http://pastebin.com/PrfWaS3D
显然,这是非常精简的,但它确实包含了我遇到的问题。在张贴3MB的GIF动画时,花了6.5分钟。在此期间,我的电脑几乎完全冻结/无响应。(注意:这对于小图像来说非常适用)
这可能是操作系统/浏览器的问题(Ubuntu上最新的谷歌Chrome),但我对此表示怀疑。如果我将文件输入放入表单中,并删除base64 ing数据(即文件的标准POSTing),大约只需一秒钟。
将6.5分钟与1秒进行比较。我一定是做错了什么。我在这里做错了什么?我该怎么办?我对网络开发还很陌生,所以我有点蒙在鼓里。我知道base64的大小确实增加了1.3倍,但很明显,这里的上传时间并没有按1.3倍扩展
var base64 = reader.result;
大约需要一秒钟。因此,我不认为存在瓶颈。瓶颈必须在上传过程中。但为什么呢?为什么表单文件输入如此比使用base64的表单隐藏输入快得多?
我为我的长篇大论道歉,但再次强调,我是网络开发的新手,并不真正理解我的问题,所以在理解所有信息的同时很难做到简明扼要。
感谢
由于您无论如何都在使用现代的JS API,因此最好使用:
URL.createObjectURL()
从Blob创建URL(比数据URL更快且可检查)btoa()
到base64编码字符串(不再需要)FormData
创建POST请求- XHR2将其发送到服务器(甚至包括进度!)
这样的东西:
- 获取文件:
file = input.files[0]
- 转换为类型化数组,执行魔术,转换回Blob:
blob = <magic here>
- 创建POST:
fd = new FormData; fd.append('file', blob, 'image.png');
- 上传:
xhr = new XMLHttpRequest; ... xhr.send(fd);
<form action="1.php" method="post">
<input type="text" id="txt" name="txt">
<input type="submit" value="submit" >
</form>
function convertToDataURLviaCanvas(url, callback, outputFormat){
var img = new Image();
img.crossOrigin = 'Anonymous';
img.onload = function(){
var canvas = document.createElement('CANVAS');
var ctx = canvas.getContext('2d');
var dataURL;
canvas.height = this.height;
canvas.width = this.width;
ctx.drawImage(this, 0, 0);
dataURL = canvas.toDataURL(outputFormat);
callback(dataURL);
canvas = null;
};
img.src = url;
}
convertToDataURLviaCanvas('1.jpg', function(base64Img){
console.log(base64Img);
document.getElementById('txt').value= base64Img;
});
1.php
echo '<img src="'.$_POST['txt'].'" />';
相关文章:
- jQuery/Javascript.toggleClass/.classList.toggle的特殊行为
- 学生搜索项目jquery/javascript
- jQuery/JavaScript在线公文包表单-打印样式表
- 如何在页面加载中使用Jquery/Javascript确定img源
- DataTables合并了两个独立表中的jQuery/Javascript函数
- 在 Jquery/Javascript 中使用多个 OR (||) 运算符时如何设置变量
- 如何在jquery+javascript中只在输入框中输入数字(使用regex)
- 在Jquery/Javascript中的Array中插入Textbox值
- 使用Jquery/Javascript替换CSS属性
- Jquery/Javascript:通过按下按钮显示数组中的随机图像
- 选中复选框的Jquery/Javascript问题使用输入框操作将行从一个表添加到另一个表
- 在for循环中未获取JQuery/JavaScript对象值
- 使用jQuery/Javascript在Facebook上发送消息
- jQuery/Javascript foreach If/Else |如果为空(不执行任何操作)Else(显示forea
- 使用jQuery+Javascript识别一个空文本节点
- jquery/javascript字符串中的撇号
- jQuery/Javascript在内容可编辑的当前段落后插入元素
- 在页面加载时激活jQuery/Javascript函数
- 如何创建php函数或任何脚本/jquery Javascript,使我能够获取与复选框关联的值并添加它们
- Jquery/Javascript使用IF/ELSE语句更改img SRC