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

时间:2014-02-12 06:32:44

标签: javascript html sharepoint

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

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

类似的东西:

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

return true;
}

由于锁定输入='文件'属性的性质,这是不可能的吗?

3 个答案:

答案 0 :(得分:15)

试试这个:

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

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

答案 1 :(得分:2)

从读取https://developer.mozilla.org/en-US/docs/Web/API/File/File#Syntaxbits构造函数的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,
    });
}

答案 2 :(得分:0)

一种更简单,更节省内存的方法-将文件的'name'属性更改为可写:

xunit.diagnosticMessages

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

方法来自 Cannot assign to read only property 'name' of object '[object Object]'