2016-12-07 11 views
7

<input type="file">から受信したファイルのプロパティは読み取り専用です。JavaScriptでFileオブジェクトの修正されたコピーを作成するには?

例えば、file.nameを書き直そうとすると、暗黙的に失敗するか、TypeError: Cannot assign to read only property 'name' of object '#<File>'を投げます。 Object.assign({}, file)失敗した(空のオブジェクトを作成します)を経由してコピーを作成しようとすると

<input onchange="onchange" type="file"> 
onchange = (event) => { 
    const file = event.target.files[0]; 
    file.name = 'foo'; 
} 

したがって、どのようにしてFileオブジェクトをクローンしますか?

https://developer.mozilla.org/en-US/docs/Web/API/Blob/Blob

let file = event.target.files[0]; 
if (this.props.distro) { 
    const name = 'new-name-here' + // Concat with file extension. 
     file.name.substring(file.name.lastIndexOf('.')); 
    // Instantiate copy of file, giving it new name. 
    file = new File([file], name, { type: file.type }); 
} 

File()の最初の引数でなければなりません:自身がBlobの拡張である

https://developer.mozilla.org/en-US/docs/Web/API/File#Implementation_notes

答えて

8

私のソリューションはFileコンストラクタで横たわっていました配列、単に元のファイルではありません。

+0

ええ、これはありがとうございます。 – Jazzy

3

FormData.prototype.append()を使用すると、BlobFileオブジェクトに変換することもできます。

let file = event.target.files[0]; 
let data = new FormData(); 
data.append("file", file, file.name); 
let _file = data.get("file"); 
関連する問題