为了账号安全,请及时绑定邮箱和手机立即绑定

从 url 设置文件输入文件

从 url 设置文件输入文件

暮色呼如 2022-11-03 10:11:10
我有一个文件输入:<input type="file" id="myImageInput" accept="image/*">我有一个预览图:<img src="http://myImageUrl" id="myImagePreview">我想将图像设置为 file-input#myImageInput 的文件。我尝试什么:从 img#myImagePreview 创建 Base64:function toDataUrl(url, callback) {    var xhr = new XMLHttpRequest();    xhr.onload = function() {        var reader = new FileReader();        reader.onloadend = function() {            callback(reader.result);        }        reader.readAsDataURL(xhr.response);    };    xhr.open('GET', url);    xhr.responseType = 'blob';    xhr.send();}let base64Image;toDataUrl("http://myImageUrl",function(x){    base64Image = x;})创建 DataTransfer 并将 base64Image 添加到其中:const dT = new ClipboardEvent('').clipboardData || // Firefox < 62 workaround exploiting https://bugzilla.mozilla.org/show_bug.cgi?id=1422655new DataTransfer(); // specs compliant (as of March 2018 only Chrome)dT.items.add(new File(['myNewFile'], base64Image ));document.querySelector('#myImageInput').files = dT.files;Console.log #myImageInput.files:0: FilelastModified: 1593986842957lastModifiedDate: Mon Jul 06 2020 00:07:22 GMT+0200 (Central European Summer Time) {}name: "data:image/jpeg;base64,/9j/4AAQSkZJRgABCSAQAASABIAAADD"size: 9type: ""webkitRelativePath: ""这看起来不对,但它实际上设置了一个“文件”......现在我尝试从 myImageInput 预览新图像:function previewFile() {  var preview = document.querySelector('#myImagePreview');  var file    = document.querySelector('#myImageInput').files[0];  var reader  = new FileReader();  reader.onloadend = function () {    preview.src = reader.result;    console.log(reader.result);  }  if (file) {    reader.readAsDataURL(file);  } else {    preview.src = "";  }}previewFile();但是图像坏了。#myImagePreview:<img src="data:application/octet-stream;base64,bXlOZyXdGacWxl" id="myImagePreview">我需要为 DataTransfer.items 提供 blob 吗?一个 base64 或一个 fileObject 来完成这项工作?
查看完整描述

1 回答

?
米琪卡哇伊

TA贡献1998条经验 获得超6个赞

您的 File 构造函数不正确,文件数据是第一个参数,文件名是第二个参数。

此外,您将 base64 数据而不是二进制数据放入文件中。

下面的 bob 用于创建 File 而不是 base64 字符串。


function toDataUrl(url, callback) {

    var xhr = new XMLHttpRequest();

    xhr.onload = function() {

        callback(xhr.response);

    };

    xhr.open('GET', url);

    xhr.responseType = 'blob';

    xhr.send();

}


let image;

toDataUrl("http://myImageUrl",function(x){

    image = x;

})

...


const dT = new ClipboardEvent('').clipboardData || // Firefox < 62 workaround exploiting https://bugzilla.mozilla.org/show_bug.cgi?id=1422655

new DataTransfer(); // specs compliant (as of March 2018 only Chrome)

dT.items.add(new File([image], 'myNewFile'));

document.querySelector('#myImageInput').files = dT.files;


查看完整回答
反对 回复 2022-11-03
  • 1 回答
  • 0 关注
  • 90 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号