Convert HTML5 Canvas into File to be uploaded?(将 HTML5 Canvas 转换为要上传的文件?)
问题描述
标准的 HTML 文件上传工作如下:
The standard HTML file upload works as follows:
<g:form method="post" accept-charset="utf-8" enctype="multipart/form-data"
name="form" url="someurl">
<input type="file" name="file" id="file" />
</form>
在我的情况下,我将图像加载到 html5 画布中,并希望将其作为文件提交到服务器.我能做到:
In my case I loaded an image into a html5 canvas and want to submit it as a file to the server. I can do:
var canvas; // some canvas with an image
var url = canvas.toDataURL();
这给了我一个 base64 格式的图像/png.
This gives me a image/png as base64.
如何将 base64 图像发送到服务器,就像使用输入类型文件一样?
问题是base64文件和文件的类型不一样,在input type="file"里面.
The problem is that the base64 file is not of the same type as the file, which is inside the input type="file".
能否以某种方式转换服务器类型相同的base64?
推荐答案
出于安全原因,您不能直接设置文件输入元素的值.
For security reasons, you can't set the value of a file-input element directly.
如果你想使用文件输入元素:
If you want to use a file-input element:
- 从画布创建图像(如您所做的那样).
- 在新页面上显示该图像.
- 让用户右键单击并保存到他们的本地驱动器.
- 然后他们可以使用您的文件输入元素上传新创建的文件.
或者,您可以使用 Ajax 发布画布数据:
Alternatively, you can use Ajax to POST the canvas data:
你问的是 blob:
var blobBin = atob(dataURL.split(',')[1]);
var array = [];
for(var i = 0; i < blobBin.length; i++) {
array.push(blobBin.charCodeAt(i));
}
var file=new Blob([new Uint8Array(array)], {type: 'image/png'});
var formdata = new FormData();
formdata.append("myNewFileName", file);
$.ajax({
url: "uploadFile.php",
type: "POST",
data: formdata,
processData: false,
contentType: false,
}).done(function(respond){
alert(respond);
});
注意:最新的浏览器一般都支持 blob.
Note: blob is generally supported in the latest browsers.
这篇关于将 HTML5 Canvas 转换为要上传的文件?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:将 HTML5 Canvas 转换为要上传的文件?
- CSS媒体查询(最大高度)不起作用,但为什么? 2022-01-01
- 如何使用 JSON 格式的 jQuery AJAX 从 .cfm 页面输出查 2022-01-01
- Quasar 2+Apollo:错误:找不到ID为默认的Apollo客户端。如果您在组件设置之外,请使用ProvideApolloClient() 2022-01-01
- 失败的 Canvas 360 jquery 插件 2022-01-01
- Css:将嵌套元素定位在父元素边界之外一点 2022-09-07
- Flexslider 箭头未正确显示 2022-01-01
- addEventListener 在 IE 11 中不起作用 2022-01-01
- 使用RSelum从网站(报纸档案)中抓取多个网页 2022-09-06
- Fetch API 如何获取响应体? 2022-01-01
- 400或500级别的HTTP响应 2022-01-01