LoopBack Storage Service, upload directly (without request object)
Asked Answered
S

1

9

I want to upload a file to a storage container using the Loopback storage service.

But the .upload() method expects a request object. But what if I want to upload an existing file that's not coming from a submitted form?

Do I need to fake a POST request in order to make the upload handler happy? Seems like there must be a better way.

Sousa answered 12/10, 2015 at 9:44 Comment(1)
Not tried,but there is method to get stream apidocs.strongloop.com/loopback-component-storage/…. This returns stream, you can use pipe and simply upload existing file using stream.Mitchell
F
3

As @RohitArkani hinted, the file app-cloud.js contains a version 1 example of file upload which uses storageService.uploadStream(container, file, [options], Callback).

var s3 = new StorageService({
  provider: 'amazon',
  key: "your-amazon-key",
  keyId: "your-amazon-key-id"
});

var fs = require('fs');
var path = require('path');
var stream = s3.uploadStream('con1', 'test.jpg');
fs.createReadStream(path.join(__dirname, 'test.jpg')).pipe(stream);

It seems (but see the comment) that in version 2, you get the storage service via

var ds = loopback.createDataSource({
  connector: require('loopback-storage-service'),
  provider: 'amazon',
  key: '...',
  keyId: '...'
});
var Container = ds.createModel('container');

instead. Then, call Container.uploadStream(...).

Furey answered 9/3, 2016 at 16:17 Comment(1)
It seems version 2 still needs to make use of the pipe method above, cause uploadStream just gets the stream for uploading and it's strange that there is no callback method to act on it (node_modules/loopback-component-storage/lib/storage-service.js) even though in the official doc it mentions about the callback.. apidocs.strongloop.com/loopback-component-storage/…Sublieutenant

© 2022 - 2024 — McMap. All rights reserved.