2016-09-23 10 views
0

JavaScriptでファイルオブジェクトを作成しましたが、サイズプロパティに値を入れることができません。ファイルオブジェクトのサイズプロパティに値を追加できません

vm.allFiles[key] = new File([], value.fileName, { 
    size: value.fileSize // this doesn't work 
}); 
vm.allFiles[key].current = 'done'; 
vm.allFiles[key].fileID = value.id; 
// vm.allFiles[key].size = value.fileSize - this gives error of Cannot assign to read only property 'size' of object '#<File>' 

編集:回答に関して。

サーバから返されたvalueは、ちょうどObjectであり、Fileオブジェクト種ではありません。新しいアップロードされたファイルが配列vm.allFilesに格納されるため、Fileオブジェクトとして持っている必要がある理由です。

+0

、およびファイルのコンストラクタの間違った使用。また、コンストラクタは[どこでもサポートされていません](http://caniuse.com/#search=file%20api)です。ファイル/ BLOBにコンテンツ自体が含まれていない場合は、独自のプレーンオブジェクト/クラスを作成するようにアドバイスします。あなたはFileReaderやFormDataをほかの何ものにも使用できません – Endless

答えて

2

FilesizeプロパティはBlobから継承されます。 Blobsizeプロパティは読み取り専用です。

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

あなたが上書きされるプロパティを強制したい場合は、あなたがこれを行うことができます:

Object.defineProperty(vm.allFiles[key], 'size', { 
    value: value.fileSize 
}); 
+0

それを強制的に更新することはありますか? – iamdevlinph

+0

はい、回答を更新しました。 –

+0

これで動作します。ありがとう! – iamdevlinph

0

Blobオブジェクトは不変、生データのファイルのようなオブジェクトを表します。ブロブは、必ずしもJavaScriptネイティブ形式ではないデータを表します。 FileインターフェースはBlobに基づいており、Blob機能を継承し、ユーザーのシステム上のファイルをサポートするよう拡張しています。

出典:予期しない動作だhttps://developer.mozilla.org/en-US/docs/Web/API/Blob

関連する問題