ファイルをチャンク内でデータベースに保存しようとしていますが、FileReader.readAsArrayBuffer()を使用してonloadイベントをトリガーしています。 onloadイベントに入ったら、私の問題が発生します。「this」のスコープには、FileReaderプロパティのみが含まれ、クラスからは何もありません。 onloadイベントの直前に定義された変数でさえアクセスできません。私は、私が関数、サービス、変数にアクセスできるようにするために、 'this'の値をパラメータとして渡すように試みることができると考えていましたが、今までのところ成功していませんでした。誰かが似たようなことをしようとしたことがありますか?FileReaderがコントローラのスコープ内でオンロードされていません2
は、ここに私のコンポーネントクラスがthis
の範囲を保持する
export class UploadComponent {
title = 'Upload File';
fileData = null;
files = null;
fs;
@Input()
showUpload: boolean;
constructor(fileService: FileService) {
this.fs = fileService;
}
uploadFile() {
let temp = document.getElementById("fileToUpload");
let fr = new FileReader();
let file = temp.files[0];
let fb = fr.readAsArrayBuffer(file);
fr.onload = function(data) {
this.fs.beginFileUpload(file.name, function(data) {
let chunkSize = 200000;
let startIndex = 0;
let stopIndex = chunkSize;
let file = data.target.result;
let fileChunk = null;
while (startIndex < file.length) {
if (stopIndex < length) {
fileChunk = file.subArray(startIndex, stopIndex);
startIndex = stopIndex;
stopIndex += chunkSize;
}
else {
fileChunk = file.subArray(startIndex);
startIndex = stopIndex;
}
//fs.uploadChunk(fileChunk);
}
});
}
}
}
私のコンポーネントテンプレート
<input type="file" [(value)]="fileData" [(files)]="files" id="fileToUpload" />
<input type="button" (click)="uploadFile()" value="Upload File" />
は、そんなにありがとうも参照してください!そのような単純な解決策です。リンクのおかげで、私はいくつかのより多くの学習があります。時間制限が上がったら、私はそれを返答としてマークします。 – user2592413