Merge pull request #220 from strongloop/fix-upload-args
Declare container parameter for swagger spec
This commit is contained in:
commit
e48a4b1a10
|
@ -225,12 +225,21 @@ StorageService.prototype.removeFile = function(container, file, cb) {
|
|||
|
||||
/**
|
||||
* Upload middleware for the HTTP request/response <!-- Should this be documented? -->
|
||||
* @param {String} [container] Container name
|
||||
* @param {Request} req Request object
|
||||
* @param {Response} res Response object
|
||||
* @param {Object} [options] Options for upload
|
||||
* @param {Function} cb Callback function
|
||||
*/
|
||||
StorageService.prototype.upload = function(req, res, options, cb) {
|
||||
StorageService.prototype.upload = function(container, req, res, options, cb) {
|
||||
// Test if container is req for backward compatibility
|
||||
if (typeof container === 'object' && container.url && container.method) {
|
||||
// First argument is req, shift all args
|
||||
cb = options;
|
||||
options = res;
|
||||
res = req;
|
||||
req = container;
|
||||
}
|
||||
if (!cb && 'function' === typeof options) {
|
||||
cb = options;
|
||||
options = {};
|
||||
|
@ -253,6 +262,9 @@ StorageService.prototype.upload = function(req, res, options, cb) {
|
|||
if (this.maxFieldsSize && !options.maxFieldsSize) {
|
||||
options.maxFieldsSize = this.maxFieldsSize;
|
||||
}
|
||||
if (typeof container === 'string') {
|
||||
options.container = container;
|
||||
}
|
||||
return handler.upload(this.client, req, res, options, cb);
|
||||
};
|
||||
|
||||
|
@ -282,7 +294,7 @@ StorageService.prototype.getContainers.http =
|
|||
|
||||
StorageService.prototype.getContainer.shared = true;
|
||||
StorageService.prototype.getContainer.accepts = [
|
||||
{arg: 'container', type: 'string', required: true},
|
||||
{arg: 'container', type: 'string', required: true, 'http': {source: 'path'}},
|
||||
];
|
||||
StorageService.prototype.getContainer.returns = {
|
||||
arg: 'container',
|
||||
|
@ -304,7 +316,7 @@ StorageService.prototype.createContainer.http =
|
|||
|
||||
StorageService.prototype.destroyContainer.shared = true;
|
||||
StorageService.prototype.destroyContainer.accepts = [
|
||||
{arg: 'container', type: 'string'},
|
||||
{arg: 'container', type: 'string', required: true, 'http': {source: 'path'}},
|
||||
];
|
||||
StorageService.prototype.destroyContainer.returns = {};
|
||||
StorageService.prototype.destroyContainer.http =
|
||||
|
@ -312,7 +324,7 @@ StorageService.prototype.destroyContainer.http =
|
|||
|
||||
StorageService.prototype.getFiles.shared = true;
|
||||
StorageService.prototype.getFiles.accepts = [
|
||||
{arg: 'container', type: 'string', required: true},
|
||||
{arg: 'container', type: 'string', required: true, 'http': {source: 'path'}},
|
||||
];
|
||||
StorageService.prototype.getFiles.returns = {arg: 'files', type: 'array', root: true};
|
||||
StorageService.prototype.getFiles.http =
|
||||
|
@ -320,8 +332,8 @@ StorageService.prototype.getFiles.http =
|
|||
|
||||
StorageService.prototype.getFile.shared = true;
|
||||
StorageService.prototype.getFile.accepts = [
|
||||
{arg: 'container', type: 'string', required: true},
|
||||
{arg: 'file', type: 'string', required: true},
|
||||
{arg: 'container', type: 'string', required: true, 'http': {source: 'path'}},
|
||||
{arg: 'file', type: 'string', required: true, 'http': {source: 'path'}},
|
||||
];
|
||||
StorageService.prototype.getFile.returns = {arg: 'file', type: 'object', root: true};
|
||||
StorageService.prototype.getFile.http =
|
||||
|
@ -329,8 +341,8 @@ StorageService.prototype.getFile.http =
|
|||
|
||||
StorageService.prototype.removeFile.shared = true;
|
||||
StorageService.prototype.removeFile.accepts = [
|
||||
{arg: 'container', type: 'string', required: true},
|
||||
{arg: 'file', type: 'string', required: true},
|
||||
{arg: 'container', type: 'string', required: true, 'http': {source: 'path'}},
|
||||
{arg: 'file', type: 'string', required: true, 'http': {source: 'path'}},
|
||||
];
|
||||
StorageService.prototype.removeFile.returns = {};
|
||||
StorageService.prototype.removeFile.http =
|
||||
|
@ -338,6 +350,7 @@ StorageService.prototype.removeFile.http =
|
|||
|
||||
StorageService.prototype.upload.shared = true;
|
||||
StorageService.prototype.upload.accepts = [
|
||||
{arg: 'container', type: 'string', required: true, 'http': {source: 'path'}},
|
||||
{arg: 'req', type: 'object', 'http': {source: 'req'}},
|
||||
{arg: 'res', type: 'object', 'http': {source: 'res'}},
|
||||
];
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
test.jpg
|
||||
image-*.jpg
|
||||
customimagefield_test.jpg
|
||||
customimagefield_test.jpg
|
||||
customimagefield1_test.jpg
|
||||
|
|
|
@ -32,6 +32,23 @@ app.post('/custom/upload', function(req, res, next) {
|
|||
});
|
||||
});
|
||||
|
||||
// custom route with renamer
|
||||
app.post('/custom/uploadWithContainer', function(req, res, next) {
|
||||
var options = {
|
||||
getFilename: function(file, req, res) {
|
||||
return file.field + '_' + file.name;
|
||||
},
|
||||
};
|
||||
ds.connector.upload('album1', req, res, options, function(err, result) {
|
||||
if (!err) {
|
||||
res.setHeader('Content-Type', 'application/json');
|
||||
res.status(200).send({result: result});
|
||||
} else {
|
||||
res.status(500).send(err);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// expose a rest api
|
||||
app.use(loopback.rest());
|
||||
|
||||
|
@ -420,4 +437,20 @@ describe('storage service', function() {
|
|||
done();
|
||||
});
|
||||
});
|
||||
|
||||
it('should upload a file with container param', function(done) {
|
||||
request('http://localhost:' + app.get('port'))
|
||||
.post('/custom/uploadWithContainer')
|
||||
.attach('customimagefield1', path.join(__dirname, './fixtures/test.jpg'))
|
||||
.set('Accept', 'application/json')
|
||||
.expect('Content-Type', /json/)
|
||||
.expect(200, function(err, res) {
|
||||
assert.deepEqual(res.body, {'result': {'files': {'customimagefield1': [
|
||||
{'container': 'album1', 'name': 'customimagefield1_test.jpg',
|
||||
'originalFilename': 'test.jpg', 'type': 'image/jpeg',
|
||||
'field': 'customimagefield1', 'size': 60475},
|
||||
]}, 'fields': {}}});
|
||||
done();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
Loading…
Reference in New Issue