sql >> データベース >  >> NoSQL >> MongoDB

TypeError:パスは文字列またはバッファMEANスタックである必要があります

    ファイルをアップロードするには、ファイルをFormDataでラップする必要があります 次のようなインスタンス:

    interface Profile {
       photo: File;
    }
    
    updatePhoto(profile: Profile, id: string) {
        const body = new FormData();
        body.append('photo',profile.photo);
        return this.http.post(`http://localhost:3000/profile/photo/${id}`, body,)
            .map((response: Response) => response.json())
            .catch((error: Response) => {
                return Observable.throw(error.json());
            });
    }
    

    さらに、次のセクションでバックエンドが失敗している可能性があります。

    user.img.data = fs.readFileSync(req.body.photo);
    

    multipart/form-dataを含むフォームをアップロードしていることを考慮して エンコーディングでは、 expressjs doc

    multer を使用できます または express-fileupload

    2番目のものを使用する場合は、次のものが必要になります。

    const fileUpload = require('express-fileupload');
    
    router.use(fileUpload());// use express-fileupload as default parser for multipart/form-data encoding
    
    router.post('/photo/:id', (req, res) => {
    User.find({ _id: req.params.id })
        .exec((err, user) => {
            if (err) {
                return res.status(500).json({
                    title: 'An error occured',
                    error: err
                });
            }
            user.img.data = req.files.photo.data;
            user.img.contentType = 'image/png';
            user.save((err, obj) => {
                if (err) {
                    throw err
                }
                console.log('success')
            })
        });
    });
    



    1. mongodbに埋め込まれたコメントページング

    2. AddToSetで更新してMongoDBC#でnull値を更新しない

    3. 共有フォルダーでMongoを実行しているBoot2Docker(Windowsの場合)(このファイルシステムはサポートされていません)

    4. PyMongoを使用して配列内のオブジェクトを更新する