Wait for the image to finish writing before resizing
This commit is contained in:
parent
305dd77f43
commit
2c577cb7ae
2 changed files with 36 additions and 30 deletions
|
@ -19,7 +19,7 @@ export function* post(next) {
|
||||||
|
|
||||||
uploader.acceptedEvent();
|
uploader.acceptedEvent();
|
||||||
|
|
||||||
uploader.receive();
|
yield uploader.receive();
|
||||||
|
|
||||||
yield uploader.promise;
|
yield uploader.promise;
|
||||||
|
|
||||||
|
|
|
@ -70,41 +70,47 @@ export default class Uploader {
|
||||||
}
|
}
|
||||||
|
|
||||||
receive() {
|
receive() {
|
||||||
this.path = join(this.file.id[0], `${this.file.id}_${this.file.name}`);
|
return new Promise((resolve) => {
|
||||||
this.localStream = fs.createWriteStream(join(storePath, this.path));
|
this.path = join(this.file.id[0], `${this.file.id}_${this.file.name}`);
|
||||||
|
this.localStream = fs.createWriteStream(join(storePath, this.path));
|
||||||
|
|
||||||
this.upload.pause();
|
this.upload.pause();
|
||||||
|
|
||||||
this.upload.on('data', (data) => {
|
this.localStream.on('finish', () => {
|
||||||
this.receivedSize += data.length;
|
resolve();
|
||||||
if (this.receivedSize > this.context.user.max_filesize) {
|
});
|
||||||
fs.unlink(join(storePath, this.path));
|
|
||||||
this.context.throw(413, `{"error": {"message": "The file you tried to upload is too large.",
|
|
||||||
"code": 601}}`);
|
|
||||||
}
|
|
||||||
|
|
||||||
this.localStream.write(data);
|
this.upload.on('data', (data) => {
|
||||||
|
this.receivedSize += data.length;
|
||||||
|
if (this.receivedSize > this.context.user.max_filesize) {
|
||||||
|
fs.unlink(join(storePath, this.path));
|
||||||
|
this.context.throw(413, `{"error": {"message": "The file you uploaded is too large.",
|
||||||
|
"code": 601}}`);
|
||||||
|
}
|
||||||
|
|
||||||
this.percentComplete = Math.floor(this.receivedSize * 100 / this.expectedSize);
|
this.localStream.write(data);
|
||||||
if (this.percentComplete > this.lastPercent && this.lastTick < Date.now() - 1000) {
|
|
||||||
const progressEvent = `{"type": "file-progress", "data":
|
|
||||||
{"id": "${this.file.id}", "complete": ${this.percentComplete}}}`;
|
|
||||||
this.context.redis.publish(`/file/${this.file.id}`, progressEvent);
|
|
||||||
this.context.redis.publish(`/user/${this.context.user.id}`, progressEvent);
|
|
||||||
this.lastTick = Date.now();
|
|
||||||
}
|
|
||||||
this.lastPercent = this.percentComplete;
|
|
||||||
|
|
||||||
this.md5sum.update(data);
|
this.percentComplete = Math.floor(this.receivedSize * 100 / this.expectedSize);
|
||||||
|
if (this.percentComplete > this.lastPercent && this.lastTick < Date.now() - 1000) {
|
||||||
|
const progressEvent = `{"type": "file-progress", "data":
|
||||||
|
{"id": "${this.file.id}", "complete": ${this.percentComplete}}}`;
|
||||||
|
this.context.redis.publish(`/file/${this.file.id}`, progressEvent);
|
||||||
|
this.context.redis.publish(`/user/${this.context.user.id}`, progressEvent);
|
||||||
|
this.lastTick = Date.now();
|
||||||
|
}
|
||||||
|
this.lastPercent = this.percentComplete;
|
||||||
|
|
||||||
|
this.md5sum.update(data);
|
||||||
|
});
|
||||||
|
|
||||||
|
this.upload.on('end', () => {
|
||||||
|
this.file.size = this.receivedSize;
|
||||||
|
this.file.md5 = this.md5sum.digest('hex');
|
||||||
|
this.localStream.end();
|
||||||
|
});
|
||||||
|
|
||||||
|
this.upload.resume();
|
||||||
});
|
});
|
||||||
|
|
||||||
this.upload.on('end', () => {
|
|
||||||
this.file.size = this.receivedSize;
|
|
||||||
this.file.md5 = this.md5sum.digest('hex');
|
|
||||||
this.localStream.end();
|
|
||||||
});
|
|
||||||
|
|
||||||
this.upload.resume();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
acceptedEvent() {
|
acceptedEvent() {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue