2017-06-01 3 views
0

ich das Bild herunterladen möchten, und es um die Lagerung zu sparen, wenn meine Datenbank mit dem ‚PHOTO_URL‘ FeldDatenbank löst Feuerbasis Funktion Bilder von URL herunterzuladen und zu Speicher speichern

exports.saveToStorage = functions.database.ref(`/images/${itemImageRef}`) 
.onWrite(event => { 
    const filePath = event.data.val(); 
    const filename = filePath.split('/').pop(); 

    var download = request.get(filePath).on('error', (err) => { 
    console.log(err) 
    }) 
    .pipe(fs.createWriteStream(filename)); 

    download.on('finish',() => { 
    const bucket = gcs.bucket('id.appspot.com'); 
    const storagePath = `images/${filename}`; 

    return bucket.upload(download, { destination: storagePath }) 
    .then(() => { 
     console.log('success upload'); 
    }); 
    }); 
}); 

es „Fehler protokolliert wird aktualisiert : EROFS: schreibgeschütztes Dateisystem, öffne 'image.jpg' bei Error (nativ). " Ich nehme an, dass ich die von createWriteStream gespeicherte Datei nicht abrufen kann? Also, wie soll ich Bilder aus dem Internet herunterladen?

+0

Vielleicht würde Ihnen das helfen: https://stackoverflow.com/q/43698405/3366109 – Jobsamuel

+0

danke, aber ich habe meinen Plan aktualisiert, so dass es in der Lage sein sollte, eine externe Anfrage zu machen. –

+0

@Jobsamuel, ich habe die Lösung übersehen, der Code hilft, kann ich jetzt die Daten zu Firebase-Speicher, die den Schritt zum Speichern von Datei 'lokal' mit fs in meinem ursprünglichen Ansatz übergibt. Die Firebase-Funktionen können nun die Datei im Speicher speichern, erkennen jedoch immer noch nicht, dass es sich um ein Bild handelt. Vielleicht muss ich die Einstellung in metadata contentType ändern. –

Antwort

3

mit dem Beitrag von @Jobsamuel vorgeschlagen, funktioniert der Code jetzt:

exports.saveToStorage = functions.database.ref(`/images/${itemImageRef}`) 
.onWrite(event => { 

    const filePath = event.data.val(); 
    const filename = filePath.split('/').pop(); 

    const bucket = gcs.bucket('id.appspot.com'); 
    const remoteWriteStream = bucket.file(filename).createWriteStream({ 
    metadata: { contentType: 'image/jpeg' } 
    }); 

    request(filePath).pipe(remoteWriteStream) 
    .on('error', (err) => console.log(err)) 
    .on('finish',() => console.log('success save image')); 

}); 

von Rohr der Anfrage Ergebnis direkt an dem heißen Stein, es löst das Problem, indem Sie den Schritt in einer lokalen Datei zu schreiben überspringt, was ich suspect ist der Grund, warum mein ursprünglicher Code fehlschlägt. Vergiss auch nicht contentType für Bilder zu setzen.

Verwandte Themen