微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

部署到 Heroku 后,Nest.js 和 Multer 图像文件上传失败

如何解决部署到 Heroku 后,Nest.js 和 Multer 图像文件上传失败

在本地上传和检索图像文件对我来说很好 - 但在构建并部署到 Heroku 之后,文件上传不再“真正”有效 - 尽管我的 API 在上传时返回“成功”。

这是我的流程:上传到我的服务器后(与 angular 11 应用程序并排)- 然后我(从客户端)调用 api 端点以获取“iploads”文件夹中文件的所有名称。 “ fs.readdir”函数返回最近上传文件名称 - 但是当我对部署的目录“bash”时,实际文件无处可寻 - 图像“src”链接中使用的文件显示为“损坏” - 此外,http 响应是:“503 服务不可用”

当我在本地运行服务器和客户端时,所有这些都可以正常工作 - 所以(下班后)我强烈怀疑在我部署后,在 FileInterceptor 中设置的“目标”找不到文件夹(甚至无法创建它)我指定的。

API 图片上传端点代码

```@Post()
@UseInterceptors(
  FileInterceptor('image',{
    storage: diskStorage({
      destination: (req,file,cb) => cb(null,resolve('.','src/assets','uploads')),filename:(req,cb) => {
        let fn = file.originalname;
        cb(null,/* file.originalname */ fn);
    }
    })
  }),)
async uploadedFile(@UploadedFile() file) {
  const response = {
    originalname: file.originalname,filename: file.filename,};
  return {
    status: HttpStatus.OK,message: 'Image uploaded successfully!',data: response,};}```

上传客户端代码

```uploadImages() {
var fd = new FormData();
fd.append('image',this.selectedFile,this.selectedFile.name);
let uri = 'http://localhost:4200';
if(environment.production === true){
  uri = 'https://ngmonetscat.herokuapp.com';
} else{
  uri = 'http://localhost:4200';
}

this.https
  .post( uri + '/api/uploadimage/',fd).subscribe(()=>{
  });}```

获取文件名 API 端点:

```public getimageFiles() {
    let promise = new Promise(function(resolve,reject) {       
        const fs = require('fs');
        var images = [];       
           
        fs.readdir('./src/assets/uploads/',(err,files) => {
            if (err) {
                console.log('file reader error' + err.message)
                reject(err); 
            }else{
                files.forEach(file => {
                    if (file.toLowerCase().includes('.png') || 
                      file.toLowerCase().includes('.jpg') ){
                        console.log(file);
                        images.push(file);
                    }
                });  
            resolve(images);
            }            
        })

    });return promise;}```

客户端 - 获取文件名:

```loadImages() {
let uri = 'http://localhost:4200';
let imagefolder = '';
if(environment.production === true){
  uri = 'https://ngmonetscat.herokuapp.com';
  imagefolder  = '/assets/uploads/';
} else{
  uri = 'http://localhost:4200';
  imagefolder = '/assets/uploads/';
}

this.https
  .get( uri + '/api/hello/')
  .subscribe(res => {
    console.log(JSON.stringify(res));

    for (const key in res) {
      this.availableImages.push(  imagefolder + res[key]);
  }});}```

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。