ユーザーがファイルをアップロードする前にファイルの名前を変更できるようにしたいのですが。
File
プロパティが既に設定されているJavascriptにname
オブジェクトがありますが、これを更新できるようにしたいと思います。現在、明白なmyFile.name = "new-name.txt"
は、このプロパティが読み取り専用であることを示すエラーを返します。
JavaScript name
オブジェクトのFile
プロパティを変更する最良の方法は何ですか?
名前が付いたinput
タグを追加して、name
プロパティをユーザーから非表示にすることができます。サーバーでは、名前としてinput
を使用し、デフォルト名は無視してください。
今 file.name
は読み取り専用のプロパティです。これは、ブラウザでFileオブジェクトの名前を変更するための最良の方法であることがわかりました。
const myNewFile = new File([myFile], 'new_name.png', {type: myFile.type});
これを試して:
var blob = file.slice(0, file.size, 'image/png');
var newFile = new File([blob], 'name.png', {type: 'image/png'});
注:これは画像タイプ用であり、実際に使用しているタイプでこのタイプを変更する必要があります。
Alexander Tabordaの回答に応じて... Blob.slice()の1番目と2番目のパラメーターは、新しいblobを形成する元のblobの開始バイトと終了バイトです。言うことによって:
var blob = file.slice(0,-1);
「ファイルの終わりにコピーする」(これが私があなたの目標だと思うものです)ではなく、「最後のバイトを除いてBLOB全体をコピーする」と言っています。
@carestadが言うように
var blob = file.slice(0, file.size);
その後、新しいFile()オブジェクトを作成すると、新しい名前で正確なコピーが作成されます。
Pngでは、ファイルは最後のバイトがないと無効と見なされます。
From: https://developer.mozilla.org/en-US/docs/Web/API/Blob/slice
使用できます
FileSystemEntry.moveTo(newParent[, newName][, successCallback][, errorCallback]);
ファイルまたはディレクトリの名前を変更します。
それはMDNからです: https://developer.mozilla.org/en-US/docs/Web/API/FileSystemEntry/moveTo