2016-12-07 59 views
7

<input type="file">'dan alınan dosya özellikleri salt okunurdur. Örneğin, file.name'u yeniden yazmak için aşağıdaki girişimi sessizce başarısız olur veya TypeError: Cannot assign to read only property 'name' of object '#<File>''u atlar. Object.assign({}, file) başarısız üzerinden bir kopyasını oluşturmak için çalışılıyorJavaScript'te bir File nesnesinin değiştirilmiş bir kopyası nasıl oluşturulur?

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

(boş bir nesne oluşturur).

Peki bir kişi bir File nesnesini nasıl klonlayabilir?

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 }); 
} 

Not File() ilk argümanı olması gerekir: kendisi Blob bir uzantısıdır

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

:

cevap

8

Çözümümün File yapıcı yatıyordu dizi, sadece orijinal dosya değil.

+0

Evet, bu teşekkürler. – Jazzy

3

Blob değerini File nesnesine dönüştüren FormData.prototype.append() nesnesini kullanabilirsiniz.

let file = event.target.files[0]; 
let data = new FormData(); 
data.append("file", file, file.name); 
let _file = data.get("file");