Imagen с 0 байтами в Firebase-хранилище загружается с Node js - PullRequest
0 голосов
/ 21 декабря 2018

Я пытаюсь загрузить изображение в Firebase-хранилище из Node.js, я следовал приведенному ниже инструкциям, которые дают firebase в их документе и все работают нормально, но когда изображение находится в хранилище, размер составляет 0 байт, и вы можетене вижу превью.

Это мой код:

const uploadImageToStorage = (file,filename) => {
    let prom = new Promise((resolve, reject) => {
        if (!file) {
            reject('No image file');
        }
        let newFileName = `${file.originalname}_${Date.now()}`;
        let fileUpload = bucket.file(newFileName);
        const blobStream = fileUpload.createWriteStream({
            metadata: {
                contentType: file.mimetype
            }
        });

        blobStream.on('error', (error) => {
            reject('Something is wrong! Unable to upload at the moment.');
        });

        blobStream.on('finish', () => {
            // The public URL can be used to directly access the file via HTTP.
            const url = `https://storage.googleapis.com/${bucket.name}/${fileUpload.name}`;
            resolve(url);
        });

        blobStream.end(file.buffer);
    });
    return prom;
}

Это мой метод app.post:

app.post('/Upload_img',multer.single("file"), function (req, res) {

    console.log("Upload Imagennes");
    let url = "";
    let file= req.file;
    if (file) {
        uploadImageToStorage(file,file.name).then((success) => {
            url = success;
            res.status(200).send(url);
        }).catch((error) => {
            console.error(error);
        });
    }



}

Хранение:

enter image description here

1 Ответ

0 голосов
/ 22 декабря 2018

Мне удалось загрузить файл png, используя вашу функцию uploadImageToStorage.Я звонил прямо, без использования multer:

(async () => {
  const buffer = fs.readFileSync('./android.png');
  const file = {
    originalname: 'android.png',
    mimetype: 'image/png',
    buffer,
  }
  try {
    return await uploadImageToStorage(file, file.originalname);
  } catch (err) {
    console.log(err);
  }
})();

Это работает, как и ожидалось.Так что проблема, вероятно, в вашем коде Express.js или в multer.Попробуйте зарегистрировать req.file и req.file.buffer в коде сервера и убедитесь, что он содержит ожидаемые данные.

...