Firebase Storage: в моем хранилище появляется только 10 изображений - PullRequest
0 голосов
/ 01 марта 2020

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

, вот мой код:

Nodejs:

exports.addUserPhoto = (req, res) => {
    const BusBoy = require('busboy');
    const path = require('path');
    const os = require('os');
    const fs = require('fs');

    const busboy = new BusBoy({ headers: req.headers});

    let imageFileName;
    let imageToBeUploaded = {};
    let deviceID = '';
    let name = '';
    let imgFileName;
    let imageExtension
    busboy.on('file', (fieldname, file, filename, encoding, mimetype) => {
        console.log('ok', fieldname, filename, encoding, mimetype);
        if (mimetype !== 'image/jpeg' && mimetype !== 'image/png') {
          return res.status(400).json({ error: 'Wrong file type submitted' });
        }
        // my.image.png => ['my', 'image', 'png']
        imageExtension = filename.split('.')[filename.split('.').length - 1];
        // 32756238461724837.png
        imageFileName = `${Math.round(
          Math.random() * 1000000000000
        ).toString()}.jpg`;
        const filepath = path.join(os.tmpdir(), imageFileName);
        imageToBeUploaded = { filepath, mimetype };
        file.pipe(fs.createWriteStream(filepath));
    });
    busboy.on('field', function(fieldname, val, fieldnameTruncated, valTruncated, encoding, mimetype) {
        if(fieldname == "deviceID")
        {
            deviceID = val;
        }
        else if(fieldname == "name")
        {
            name = val;
        }
      });
    busboy.on('finish', () => {
        async function readFiles () {
            const [files] = await admin.storage().bucket(config.storageBucket).getFiles({ prefix: `${deviceID}/${name}`});
            let imageNum = 1;
            let existingImgName;
            files.forEach(f => {
                existingImgName = Number(f.name.split('/')[f.name.split('/').length - 1].split('.')[0]);
                if(imageNum == existingImgName)
                {
                    ++imageNum;
                }
            });
            imgFileName =  imageNum + '.jpg';
          };
        
        readFiles ().then(()=>{
            admin.storage().bucket(config.storageBucket).upload(imageToBeUploaded.filepath,{
                resumable: false,
                destination: `${deviceID}/${name}/${imgFileName}`,
                metadata: {
                    metadata: {
                        contentType: imageToBeUploaded.mimetype
                    }
                }
            })
            .then(() => {
                return res.json({message: 'Image uploaded successfully'});
            })
            .catch(err => {
                console.error(err);
                return res.status(500).json({error: err.code})
                
            });
        })
        
    });
    busboy.end(req.rawBody);
};

Реагировать:

uploadToCloud = async() => {
    const { numScreenShots, detections, image } = this.state;
    for (let i = 0; i < numScreenShots; i++) 
    {   
        var block =  this.state.imageArray[i].split(";");
        var contentType = block[0].split(":")[1];// In this case "image/gif"
        var realData = block[1].split(",")[1];// In this case "R0lGODlhPQBEAPeoAJosM...."
    // Convert it to a blob to upload
        var blob = this.b64toBlob(realData, contentType);
        const formData = new FormData();
        formData.append('image', blob);
        formData.append('deviceID', this.state.deviceID);
        formData.append('name', this.state.occupantName);
        this.uploadImage(formData);
        this.sleep(500);
    }
  };
  
    uploadImage = (formData) => {
    axios({
        url: 'https://cors-anywhere.herokuapp.com/https://asia-east2-smartlock-51f22.cloudfunctions.net/api/addUserPhoto',
        method: 'POST',
        headers: {
        'Access-Control-Allow-Origin': 'http://127.0.0.1:3000',
        'Access-Control-Allow-Methods': 'POST',
        'Access-Control-Allow-Headers': 'Access-Control-Allow-Methods, Access-Control-Allow-Origin, Origin, Accept, Content-Type',
        'Accept': 'application/x-www-form-urlencoded',
        'Content-Type':'application/x-www-form-urlencoded'
        },
        data:formData
        })
        .then(res => (console.log(res)))
        .catch((err) => (console.log(err)));
    }

в коде реакции, я беру строки изображений base64 из снимков с веб-камеры, преобразую их в .blob и отправляю в облачное хранилище

в в окне консоли все файлы успешно загружены

enter image description here

, однако в моем хранилище Firebase появляется только 10 изображений

enter image description here

пожалуйста, сообщите

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