Есть ли предел загрузки на Firebase? - PullRequest
0 голосов
/ 18 октября 2019

Я не могу загрузить файлы размером более 5 МБ в хранилище firebase, используя функцию firebase с busboy. возвращается ошибка:

ResumableUploadError: Не удалось выполнить возобновляемую загрузку. Каталог /tmp/.config недоступен для записи. Вы можете попробовать другую загрузку, на этот раз установив options.resumable в false.

Работает менее 5 Мб. Есть ли обходной путь, если лимит 5 МБ?

РЕДАКТИРОВАТЬ:

Вот мой код

  const functions = require('firebase-functions');
  const admin = require('firebase-admin');
  const express = require('express');

  var serviceAccount = require('./serviceAccount.json');
  admin.initializeApp(
  {credential: admin.credential.cert(serviceAccount),
    databaseURL:dbURL})
  let gcs = admin.storage();
  const bucketName = 'bucket name';

  const app = express();
  const api = functions.https.onRequest(app);

  app.post('/addImage',(req,res)=>{

    const busboy = new Busboy({ headers: req.headers });
    let uploadData = null;
    let origFileName;

    busboy.on("file", (fieldname, file, filename, encoding, mimetype) => {
      origFileName = filename
      const filepath = path.join(os.tmpdir(), filename);
      uploadData = { file: filepath, type: mimetype };
      file.pipe(fs.createWriteStream(filepath));
    });

    let formData = new Map();
    busboy.on('field', function(fieldname, val) {
      formData.set(fieldname, val);
    });

    busboy.on("finish", () => {
      const bucket = gcs.bucket(bucketName);
      let uuid = UUID();
      let dataURL = ''
      let company = formData.get('company');
      let eventCode = formData.get('eventCode');
      let type = formData.get('type');
      bucket
        .upload(uploadData.file, {
          uploadType: "media",
          metadata: {
            metadata: {
              contentType: uploadData.type,
              firebaseStorageDownloadTokens: uuid
            }
          },
          destination: company+"/"+eventCode+"/"+type+"/"+origFileName
        }).then(data=>{

          let file = data[0];
          dataURL = "https://firebasestorage.googleapis.com/v0/b/" + bucket.name + "/o/" + encodeURIComponent(file.name) + "?alt=media&token=" + uuid;


          return res.status(200).send(result);
        })
        .catch(error =>{
          console.log("error",error)
          if (err) return res.status(500).send('Internal Server Error')
        })

    });
    busboy.end(req.rawBody);
  })

Ответы [ 2 ]

2 голосов
/ 18 октября 2019

Требуется ли для вашего варианта использования значение options.resumable=true? Если это не нарушает ваш вариант использования, переключите его на false, и он должен работать для вас.

Здесь у вас есть дополнительная информация о createWriteStream.

Возобновляемые закачки включаются автоматически и должны быть явно отключены путем установки options.resumable в false.

Для возобновляемых закачек требуется доступ на запись в каталог $ HOME. Через config-store некоторые метаданные сохраняются. По умолчанию, если каталог недоступен для записи, мы вернемся к простой загрузке. Однако, если вы явно запросите возобновляемую загрузку, а мы не сможем записать в каталог конфигурации, мы вернем ResumableUploadError.

При использовании возобновляемой загрузки возникают некоторые издержки, которые могут привести к заметному снижению производительности при загрузке серии. маленьких файлов. При загрузке файлов размером менее 10 МБ рекомендуется отключить функцию возобновления.

Надеюсь, это поможет.

РЕДАКТИРОВАТЬ:

По умолчанию он включен как включенный, вы должны передать его в качестве опции, установленной в false, в createWriteStream, попробуйте сделать это и посмотреть, позволяет ли он вам загружать.

Например, вот так.

Вам нужно будет передать ему свой путь к файлу, как вы делаете, а затем добавить опцию возобновления.

.createWriteStream({
          resumable: false,
          metadata: {
            contentType: 'text/plain',
          },
        }) 

Здесь у вас есть больше информации.

0 голосов
/ 18 октября 2019

вы можете установить ограничение в правилах безопасности хранилища firebase: см. здесь

, например, установлено:

service firebase.storage {
  match /b/<your-firebase-storage-bucket>/o {
    match /images/{imageId} {
      // Only allow uploads of any image file that's less than 5MB
      allow write: if request.resource.size < 10 * 1024 * 1024
                   && request.resource.contentType.matches('image/.*');
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...