|
|
|
@ -139,6 +139,15 @@ var upload = function (Env, safeKey, content, cb) {
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
var closeBlobstage = function (Env, safeKey) {
|
|
|
|
|
var session = Env.getSession(safeKey);
|
|
|
|
|
if (!(session && session.blobstage && typeof(session.blobstage.close) === 'function')) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
session.blobstage.close();
|
|
|
|
|
delete session.blobstage;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// upload_cancel
|
|
|
|
|
var upload_cancel = function (Env, safeKey, fileSize, cb) {
|
|
|
|
|
var session = Env.getSession(safeKey);
|
|
|
|
@ -159,27 +168,22 @@ var upload_cancel = function (Env, safeKey, fileSize, cb) {
|
|
|
|
|
|
|
|
|
|
// upload_complete
|
|
|
|
|
var upload_complete = function (Env, safeKey, id, cb) {
|
|
|
|
|
var session = Env.getSession(safeKey);
|
|
|
|
|
|
|
|
|
|
if (session.blobstage && session.blobstage.close) {
|
|
|
|
|
session.blobstage.close();
|
|
|
|
|
delete session.blobstage;
|
|
|
|
|
}
|
|
|
|
|
closeBlobstage(Env, safeKey);
|
|
|
|
|
|
|
|
|
|
var oldPath = makeStagePath(Env, safeKey);
|
|
|
|
|
var newPath = makeBlobPath(Env, id);
|
|
|
|
|
|
|
|
|
|
nThen(function (w) {
|
|
|
|
|
// make sure the path to your final location exists
|
|
|
|
|
Fse.mkdirp(Path.dirname(newPath), function (e) {
|
|
|
|
|
Fse.mkdirp(Path.dirname(newPath), w(function (e) {
|
|
|
|
|
if (e) {
|
|
|
|
|
w.abort();
|
|
|
|
|
return void cb('RENAME_ERR');
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}));
|
|
|
|
|
}).nThen(function (w) {
|
|
|
|
|
// make sure there's not already something in that exact location
|
|
|
|
|
isFile(newPath, function (e, yes) {
|
|
|
|
|
isFile(newPath, w(function (e, yes) {
|
|
|
|
|
if (e) {
|
|
|
|
|
w.abort();
|
|
|
|
|
return void cb(e);
|
|
|
|
@ -188,8 +192,8 @@ var upload_complete = function (Env, safeKey, id, cb) {
|
|
|
|
|
w.abort();
|
|
|
|
|
return void cb('RENAME_ERR');
|
|
|
|
|
}
|
|
|
|
|
cb(void 0, newPath, id);
|
|
|
|
|
});
|
|
|
|
|
cb(void 0, id);
|
|
|
|
|
}));
|
|
|
|
|
}).nThen(function () {
|
|
|
|
|
// finally, move the old file to the new path
|
|
|
|
|
// FIXME we could just move and handle the EEXISTS instead of the above block
|
|
|
|
@ -217,15 +221,7 @@ var tryId = function (path, cb) {
|
|
|
|
|
|
|
|
|
|
// owned_upload_complete
|
|
|
|
|
var owned_upload_complete = function (Env, safeKey, id, cb) {
|
|
|
|
|
var session = Env.getSession(safeKey);
|
|
|
|
|
|
|
|
|
|
// the file has already been uploaded to the staging area
|
|
|
|
|
// close the pending writestream
|
|
|
|
|
if (session.blobstage && session.blobstage.close) {
|
|
|
|
|
session.blobstage.close();
|
|
|
|
|
delete session.blobstage;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
closeBlobstage(Env, safeKey);
|
|
|
|
|
if (!isValidId(id)) {
|
|
|
|
|
return void cb('EINVAL_ID');
|
|
|
|
|
}
|
|
|
|
@ -582,6 +578,9 @@ BlobStore.create = function (config, _cb) {
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
closeBlobstage: function (safeKey) {
|
|
|
|
|
closeBlobstage(Env, safeKey);
|
|
|
|
|
},
|
|
|
|
|
complete: function (safeKey, id, _cb) {
|
|
|
|
|
var cb = Util.once(Util.mkAsync(_cb));
|
|
|
|
|
if (!isValidSafeKey(safeKey)) { return void cb('INVALID_SAFEKEY'); }
|
|
|
|
|