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)
注意:这是针对图像类型的,您必须使用您实际使用的类型更改此类型.
小智 15
一种更简单且内存效率更高的方法 - 将文件的“名称”属性更改为可写:
Object.defineProperty(fileToAmend, 'name', {
writable: true,
value: updatedFileName
});
Run Code Online (Sandbox Code Playgroud)
其中 fileToAmend 是文件,updatedFileName 是新文件名。
通过阅读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)