如何将Blob作为FormData上传文件名?

jon*_*tro 63 javascript dom google-chrome form-data

我目前正在使用以下代码上传从剪贴板粘贴的图像:

// Turns out getAsFile will return a blob, not a file
var blob = event.clipboardData.items[0].getAsFile(), 
    form = new FormData(),
    request = new XMLHttpRequest();
form.append("blob",blob);
request.open(
            "POST",
            "/upload",
            true
        );
request.send(form);
Run Code Online (Sandbox Code Playgroud)

结果是上传的表单字段,其名称与此类似:Blob157fce71535b4f93ba92ac6053d81e3a

有没有办法设置此或接收此文件名客户端,而不进行任何服务器端通信?

Chi*_*tor 131

对于Chrome和Firefox,只需使用:

form.append("blob",blob, filename);
Run Code Online (Sandbox Code Playgroud)

(参见MDN文档)

  • 这是MDN的"兼容性表".请注意,截至本帖子,附加文件名在除Chrome和FF之外的所有浏览器上都有不稳定的支持:https://developer.mozilla.org/en-US/docs/Web/API/FormData#compat-desktop (3认同)

Noi*_*art 28

在这里添加它,因为它似乎不在这里.

除了优秀的解决方案之外,form.append("blob",blob, filename);您还可以将blob转换为File实例:

var blob = new Blob([JSON.stringify([0,1,2])], {type : 'application/json'});
var fileOfBlob = new File([blob], 'aFileName.json');
form.append("upload", fileOfBlob);
Run Code Online (Sandbox Code Playgroud)

  • 不能在IE上工作,因为它仍然不支持File构造函数. (9认同)
  • @ RobertK.Bell,我几乎检查了Edge并且它没有工作:(然后我不得不改回blob构造函数. (2认同)