[英]How can I upload an image to mongodb using multer module
我是 nodeJs 的新手,我正在尝试通过 multer 模块将图像上传到 MongoDB。 当我通过 postman 进行测试时,后端服务器 image.js 工作正常。 但是当我想从前端上传图像时,我不能。 任何可能的建议。
这是 image.js
let express = require("express");
let app =express();
let mongodb = require("mongodb");
let assert = require("assert");
let createClient = mongodb.MongoClient;
let dbUrl = "mongodb://127.0.0.1:27017/images";
let multer = require("multer");
let storage = multer.diskStorage({
destination:(req,file,cb)=>{
cb(null,'images');
},
filename:(req,file,cb)=>{
cb(null,file.fieldname+'_'+Date.now()+'.jpg')
}
});
let upload = multer({storage:storage});
let imageup = express.Router().post('/',upload.single('image'),(req,res)=>{
createClient.connect(dbUrl,(err,db)=>{
assert.deepStrictEqual(null,err);
insertDocuments(db,'images'+req.file.filename,()=>{
db.close();
res.json({'message':"file upladed successfully"});
})
})
})
let insertDocuments = function(db,filepath,callback){
let collection = db.collection('users');
collection.insertOne({filepath:filepath},
(err,result)=>{
//.deepStrictEqual(err,result);
callback(result);
});
}
module.exports = imageup;
这是 server.js 文件,
let express = require("express");
let app = express();
let port = 8080;
app.listen(port);
app.use('/imageup',require("./image"));
console.log(`server listening to port ${port}`)
这是 service.ts
import { Injectable } from "@angular/core";
import { HttpClient } from "@angular/common/http";
import { Observable } from "rxjs";
@Injectable({
providedIn:'root'
})
export class imageupService{
constructor(public http:HttpClient){}
public imageupload(data:any):Observable<any>{
return this.http.post("http://localhost:8080/imageup",data)
}
}
这是 image.component.ts 文件
import { Component, OnInit } from '@angular/core';
import { HttpErrorResponse } from "@angular/common/http";
import { imageupService } from "../services/imageupservice";
@Component({
selector: 'imageup',
templateUrl: './imageup.component.html',
styleUrls: ['./imageup.component.css']
})
export class ImageupComponent implements OnInit {
public file:any;
constructor(public service:imageupService) { }
public saveimage(data:any){
this.service.imageupload(data).subscribe((posRes)=>{
if(posRes.message =="file upladed successfully")
{
console.log("File uploaded successfully");
}
})
}
ngOnInit(): void {
}
}
这是 HTML 文件
<p>Upload Image</p>
<input type="file" name="image" id="image" [(ngModel)]="file">
<button (click)="saveimage({'filepath':file})">Upload</button>
将图像的二进制文件直接存储在 MongoDB 中是一个非常糟糕的选择。
这种做法会很快耗尽您的存储空间,并且查询会很慢。
Multer 的设计方式允许您将文件上传到本地存储(服务器本身)/远程存储(例如 AWS S3)。 您应该做的是将 URL(用于远程存储)或路径(本地:像任何 static 资产 [css,js])存储在 MongoDB 中,而不是整个图像。
然后,您应该使用 URL 将页面上的图像渲染到远程存储(例如https://bucketname.s3.region.amazonaws.com/you_image.jpg )
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.