我正在使用Multer在Node js中上传文件,但我没有得到正确的文件。我正在尝试上传图片。 我必须在S3存储桶上传导入的文件,但找不到文件,我不知道我错在哪里。
这是我的节点js代码:
import { tap } from 'rxjs/operators';
import { AngularFireStorage } from 'angularfire2/storage';
import { AngularFirestoreCollection, AngularFirestoreDocument, AngularFirestore } from 'angularfire2/firestore';
import { Component, OnInit, Injectable } from '@angular/core';
import { AuthService } from './../auth.service';
import { DataService } from '../services/data.service';
import { News } from './../models/newsModel';
import { Observable } from 'rxjs';
@Component({
selector: 'app-news',
templateUrl: './news.component.html',
styleUrls: ['./news.component.css']
})
@Injectable()
export class NewsComponent implements OnInit {
news = {} as News;
newsCol: AngularFirestoreCollection<News>;
thenews: Observable<News[]>;
imgUrl: Observable<any>;
theData: News[] = [];
constructor(public authservice: AuthService, public dataservice: DataService, public afs: AngularFirestore,
private storage: AngularFireStorage) { }
ngOnInit() {
this.newsCol = this.afs.collection<News>('news');
this.thenews = this.newsCol.valueChanges();
}
getImgUrl(img) {
return this.storage.ref(img).getDownloadURL();
}
addNews(news) {
this.dataservice.addNews(news);
}
onLogout() {
this.authservice.onLogout();
}
}
作为回应,当我点击邮递员时,我得到文件的值为:
对象{------ WebKitFormBoundaryAo1BhVpGaB8uYmsw \ r \ nConContent-Disposition:form-data; name:“”image1“; filename =”1528114981689_566_28-1-2
答案 0 :(得分:0)
使用multer
上传文件会使文件首先保留在服务器的上传文件夹中,具体取决于您的过滤器设置。
如果文件被multer成功上传,您将从req.file
获得以下数据。
{
fieldname: 'file',
originalname: 'sample.jpg',
encoding: '7bit',
mimetype: 'image/jpeg',
destination: './uploads/',
filename: 'd1fccf5dc0125937f6fbe7a4dacfc069',
path: 'uploads/d1fccf5dc0125937f6fbe7a4dacfc069',
size: 23904
}
我将在下面的示例中使用的path
值不是目录。 Multer将在没有扩展名的情况下更改您的文件名。
您需要将上传的文件作为fileStream读取,然后将其上传到S3才有效。
例如:
let path = req.file;
let fileStream = fs.createReadStream(file.path);
fileStream.on('error', function (err) {
if (err) { throw err; }
});
fileStream.on('open', function () {
s3.upload({
"Bucket": "yourBucketName",
"Key": file.originalname,
"Body": fileStream
}, function (err: any, data: any) {
if (err) {
console.log("Error uploading data: ", err);
} else {
console.log(data);
}
});
});
希望这会对你有所帮助。