请问有什么方法能修改浏览器中file对象的name属性么?
现在项目里 android webview 4.4 遇到一个奇怪问题
中文文件被名被转移成了“%4D%3C%2E.png”这种名字了
导致form都没发提交了。本人想把name换一下名字看看能不能继续提交form
因为提交英文名的附件是没问题的。
本人尝试过这么写是不好使的 ,用原型链好像也不行
$('#file').get(0).files[0].name="123";
请问有什么方法能修改浏览器中file对象的name属性么?
现在项目里 android webview 4.4 遇到一个奇怪问题
中文文件被名被转移成了“%4D%3C%2E.png”这种名字了
导致form都没发提交了。本人想把name换一下名字看看能不能继续提交form
因为提交英文名的附件是没问题的。
本人尝试过这么写是不好使的 ,用原型链好像也不行
$('#file').get(0).files[0].name="123";
//可以强制修改
let fileName=new Date().getTime()+".png"
let newFile = new window.File([files], fileName, {type: file.type}) 这里的files是你接收的file
上面老哥的 new window.File 已经可以解决更改 file对象内 filename 的问题
还有一种需求 当你选择文件后 未提交, 然后把源文件删掉,这时候提交浏览器就会报错,我猜测浏览器当前存储的只是文件的引用
粗略解决方案是: 拿到 file 转成 base64 存起来 然后用到的时候再转成 file 对象, 文件名也能自定义
//将base64转换为blob
export function base64ToBlob(dataurl) {
let arr = dataurl.split(","),
mime = arr[0].match(/:(.*?);/)[1],
bstr = window.atob(arr[1]),
n = bstr.length,
u8arr = new Uint8Array(n);
while (n--) {
u8arr[n] = bstr.charCodeAt(n);
}
return new Blob([u8arr], { type: mime });
}
//将blob转换为file
export function blobToFile(theBlob, fileName) {
theBlob.lastModifiedDate = new Date();
theBlob.name = fileName;
theBlob.filename = fileName;
// 配置流中的 fileName
return new File([theBlob], fileName);
}
8 回答4.8k 阅读✓ 已解决
6 回答3.5k 阅读✓ 已解决
5 回答2.9k 阅读✓ 已解决
5 回答6.4k 阅读✓ 已解决
4 回答2.3k 阅读✓ 已解决
4 回答2.8k 阅读✓ 已解决
3 回答2.5k 阅读✓ 已解决
这个属性是只读的。无法做到本地的修改。但是你可以提示。