2015-10-12 12 views
8

Desidero caricare un file in un contenitore di archiviazione utilizzando Loopback storage service.Servizio di archiviazione LoopBack, caricamento diretto (senza oggetto richiesta)

Ma il .upload() method prevede un oggetto richiesta. Ma cosa succede se voglio caricare un file esistente che non proviene da un modulo inviato?

Devo simulare una richiesta POST per rendere felice il gestore di upload? Sembra che ci debba essere un modo migliore.

+0

Non provato, ma esiste un metodo per ottenere lo stream http://apidocs.strongloop.com/loopback-component-storage/#storageservice-prototype-uploadstream. Ciò restituisce il flusso, è possibile utilizzare pipe e semplicemente caricare il file esistente utilizzando lo stream. –

risposta

3

Come @RohitArkani hinted, il file app-cloud.js contiene un esempio di versione 1 di caricamento file che utilizza 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); 

E seems (ma si veda the comment), che nella versione 2, si ottiene il servizio di archiviazione tramite

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

invece. Quindi, chiama Container.uploadStream(...).

+1

Sembra che la versione 2 debba ancora utilizzare il metodo pipe, perché uploadStream ottiene il flusso per il caricamento ed è strano che non ci sia alcun metodo di callback su cui agire (node_modules/loopback-component-storage/lib/storage- service.js) anche se nel documento ufficiale si parla della richiamata .. https://apidocs.strongloop.com/loopback-component-storage/#storageservice-prototype-uploadstream – nivincp