Merge pull request #226 from mozilla/cancel_uploads

added functionality to cancel uploads
This commit is contained in:
Danny Coates 2017-07-18 12:39:52 -07:00 committed by GitHub
commit cde63595e8
4 changed files with 28 additions and 5 deletions

View File

@ -8,6 +8,7 @@ class FileSender extends EventEmitter {
super(); super();
this.file = file; this.file = file;
this.iv = window.crypto.getRandomValues(new Uint8Array(12)); this.iv = window.crypto.getRandomValues(new Uint8Array(12));
this.uploadXHR = new XMLHttpRequest();
} }
static delete(fileId, token) { static delete(fileId, token) {
@ -35,6 +36,10 @@ class FileSender extends EventEmitter {
}); });
} }
cancel() {
this.uploadXHR.abort();
}
upload() { upload() {
const self = this; const self = this;
self.emit('loading', true); self.emit('loading', true);
@ -103,7 +108,7 @@ class FileSender extends EventEmitter {
const fd = new FormData(); const fd = new FormData();
fd.append('data', blob, file.name); fd.append('data', blob, file.name);
const xhr = new XMLHttpRequest(); const xhr = self.uploadXHR;
xhr.upload.addEventListener('progress', e => { xhr.upload.addEventListener('progress', e => {
if (e.lengthComputable) { if (e.lengthComputable) {

View File

@ -79,8 +79,7 @@ $(document).ready(function() {
$('.upload-window').removeClass('ondrag'); $('.upload-window').removeClass('ondrag');
$('#page-one').show(); $('#page-one').show();
}); });
//cancel the upload
$('#cancel-upload').click(() => {});
// on file upload by browse or drag & drop // on file upload by browse or drag & drop
function onUpload(event) { function onUpload(event) {
event.preventDefault(); event.preventDefault();
@ -93,6 +92,12 @@ $(document).ready(function() {
const expiration = 24 * 60 * 60 * 1000; //will eventually come from a field const expiration = 24 * 60 * 60 * 1000; //will eventually come from a field
const fileSender = new FileSender(file); const fileSender = new FileSender(file);
$('#cancel-upload').click(() => {
fileSender.cancel();
location.reload();
notify('Your upload was cancelled.');
});
fileSender.on('progress', progress => { fileSender.on('progress', progress => {
$('#page-one').hide(); $('#page-one').hide();
$('#upload-error').hide(); $('#upload-error').hide();

View File

@ -219,6 +219,19 @@ app.post('/upload', (req, res, next) => {
}); });
}); });
}); });
req.on('close', err => {
storage
.forceDelete(newId)
.then(err => {
if (!err) {
log.info('Deleted:', newId);
}
})
.catch(err => {
log.info('DeleteError:', newId);
});
})
}); });
app.get('/__lbheartbeat__', (req, res) => { app.get('/__lbheartbeat__', (req, res) => {

View File

@ -234,13 +234,13 @@ function awsDelete(id, delete_token) {
if (!reply || delete_token !== reply) { if (!reply || delete_token !== reply) {
reject(); reject();
} else { } else {
redis_client.del(id);
const params = { const params = {
Bucket: conf.s3_bucket, Bucket: conf.s3_bucket,
Key: id Key: id
}; };
s3.deleteObject(params, function(err, _data) { s3.deleteObject(params, function(err, _data) {
redis_client.del(id);
err ? reject(err) : resolve(err); err ? reject(err) : resolve(err);
}); });
} }
@ -250,13 +250,13 @@ function awsDelete(id, delete_token) {
function awsForceDelete(id) { function awsForceDelete(id) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
redis_client.del(id);
const params = { const params = {
Bucket: conf.s3_bucket, Bucket: conf.s3_bucket,
Key: id Key: id
}; };
s3.deleteObject(params, function(err, _data) { s3.deleteObject(params, function(err, _data) {
redis_client.del(id);
err ? reject(err) : resolve(err); err ? reject(err) : resolve(err);
}); });
}); });