ruta - read file javascript
¿Cómo crear una copia modificada de un objeto File en JavaScript? (2)
Las propiedades de los archivos recibidos de un <input type="file">
son de solo lectura.
Por ejemplo, el siguiente intento de volver a escribir file.name
fallará silenciosamente o arrojará TypeError: Cannot assign to read only property ''name'' of object ''#<File>''
.
<input onchange="onchange" type="file">
onchange = (event) => {
const file = event.target.files[0];
file.name = ''foo'';
}
Intentar crear una copia mediante Object.assign({}, file)
falla (crea un objeto vacío).
Entonces, ¿cómo se clona un objeto File
?
Mi solución estaba en el constructor de File
:
https://developer.mozilla.org/en-US/docs/Web/API/File#Implementation_notes
Que en sí es una extensión de Blob
:
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 });
}
Tenga en cuenta que el primer argumento para File()
debe ser una matriz, no simplemente el archivo original.
Puede usar FormData.prototype.append()
, que también convierte un Blob
en un objeto File
.
let file = event.target.files[0];
let data = new FormData();
data.append("file", file, file.name);
let _file = data.get("file");