如何从input = File更改javascript中的文件名

mic*_*ael 8 html javascript sharepoint

我需要在上传到sharepoint站点时更改文件名(不是文件,只是名称的元数据).

我认为在javascript中更改html属性而不是使用Sharepoint后端很容易.因此,当我上传文件时,它会更改文件的名称(而不是数据)

这样的事情:

function PreSaveAction(){
   var file = document.GetElementById('fileupload1');
   file.files[0].name='ChangedName.tmp'

return true;
}
Run Code Online (Sandbox Code Playgroud)

由于锁定的input ='file'属性的性质,这是不可能的吗?

Ale*_*rda 21

试试这个:

var element = document.GetElementById('fileupload1');
var file = element.files[0];
var blob = file.slice(0, file.size, 'image/png'); 
newFile = new File([blob], 'name.png', {type: 'image/png'});
Run Code Online (Sandbox Code Playgroud)

注意:这是针对图像类型的,您必须使用您实际使用的类型更改此类型.

  • 由于 File 对象是一个 blob,因此您可以使用 var blob = file.files[0] 来用作 [blob] 中的 blob 对象。您也可以从 File 对象获取类型“blob.type”。 (8认同)

小智 15

一种更简单且内存效率更高的方法 - 将文件的“名称”属性更改为可写:

Object.defineProperty(fileToAmend, 'name', {
  writable: true,
  value: updatedFileName
});
Run Code Online (Sandbox Code Playgroud)

其中 fileToAmend 是文件,updatedFileName 是新文件名。

从法 不能指定读取对象的唯一属性“名称”“的翻译:”

  • 对我来说,这不太有效。确实如此,并且调试看起来一切正常,但是将文件保存在 indexedDB 中后,它保留了原始名称。也许它的名字是从更深的斑点或其他东西中得到的? (7认同)

Gla*_*001 9

通过阅读https://developer.mozilla.org/en-US/docs/Web/API/File/File#Syntax构造函数的bits参数File可以是一个Blob对象数组。

bits

一个由 ArrayBuffer、ArrayBufferView、Blob、USVString 对象或任何此类对象的组合组成的数组,它们将被放入文件中。USVString 对象被编码为 UTF-8。

从阅读https://developer.mozilla.org/en-US/docs/Web/API/File#Methods可以看出File继承自Blob

File 接口没有定义任何方法,而是从 Blob 接口继承方法

因此,new File([originalFile])是有效的。

我想出了以下对我有用的方法:

function renameFile(originalFile, newName) {
    return new File([originalFile], newName, {
        type: originalFile.type,
        lastModified: originalFile.lastModified,
    });
}
Run Code Online (Sandbox Code Playgroud)