Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript cloudinary上载文件找不到文件_Javascript_Node.js_Nestjs_Multer_Cloudinary - Fatal编程技术网

Javascript cloudinary上载文件找不到文件

Javascript cloudinary上载文件找不到文件,javascript,node.js,nestjs,multer,cloudinary,Javascript,Node.js,Nestjs,Multer,Cloudinary,我想用cloudinary上传一个文件,但它不起作用。文件字符串参数应该是什么 @Injectable() export class CloudinaryService { async uploadImage( file: Express.Multer.File, id: string, ): Promise<UploadApiResponse | UploadApiErrorResponse> { return new Promise((resolv

我想用cloudinary上传一个文件,但它不起作用。文件字符串参数应该是什么

@Injectable()
export class CloudinaryService {
  async uploadImage(
    file: Express.Multer.File,
    id: string,
  ): Promise<UploadApiResponse | UploadApiErrorResponse> {
    return new Promise((resolve, reject) => {
      v2.uploader.upload(
        file.filename,
        { public_id: id, folder: 'business', resource_type: 'auto' },
        (error, result) => {
          if (error) return reject(error);
          resolve(result);
        },
      );
    });
  }
}
@Injectable()
导出类CloudinaryService{
异步上传映像(
文件:Express.Multer.file,
id:string,
):承诺{
返回新承诺((解决、拒绝)=>{
v2.uploader.upload(
file.filename,
{public_id:id,文件夹:'business',资源类型:'auto'},
(错误、结果)=>{
如果(错误)返回拒绝(错误);
决心(结果);
},
);
});
}
}
这是文件对象

{
  fieldname: 'DirectorsDetails',
  originalname: 'Eddy - Information about directors.xlsx',
  encoding: '7bit',
  mimetype: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
  buffer: <Buffer 50 4b 03 04 14 00 08 08 08 00 14 2a be 52 00 00 00 00 00 00 00 00 00 00 00 00 18 00 00 00 78 6c 2f 64 72 61 77 69 6e 67 73 2f 64 72 61 77 69 6e 67 31 ... 5072 more bytes>,
  size: 5122
}
{
字段名:“董事详细信息”,
原始名称:“Eddy-关于directors.xlsx的信息”,
编码:“7bit”,
mimetype:'application/vnd.openxmlformats of icedocument.spreadsheetml.sheet',
缓冲区:,
尺码:5122
}

尝试使用
上传流
功能

import { FileUpload } from 'graphql-upload';

export class CloudinaryService {
  async uploadImage(
    file: FileUpload,
  ): Promise<UploadApiResponse | UploadApiErrorResponse> {
    return new Promise((resolve, reject) => {
      const upload = v2.uploader.upload_stream((error, result) => {
        if (error) return reject(error);
        resolve(result);
      });

      file.createReadStream().pipe(upload);
    });
  }
}
从'graphql upload'导入{FileUpload};
导出类CloudinaryService{
异步上传映像(
文件:FileUpload,
):承诺{
返回新承诺((解决、拒绝)=>{
const upload=v2.uploader.upload_流((错误,结果)=>{
如果(错误)返回拒绝(错误);
决心(结果);
});
file.createReadStream().pipe(上传);
});
}
}

文件。仅当您将多个文件存储在磁盘上时,才会填充文件名。也许
file.originalname
是您要查找的属性。

试试这个,看看是否有帮助:

调整multer以使用内存存储在后期获取缓冲区

//app.module.ts
从'@nestjs/platform express'导入{MulterModule};
从“multer”导入{memoryStorage};
@模块({
进口:[
...
多模块寄存器({
存储器:memoryStorage(),//使用存储器存储缓冲区
}),
],
控制器:[AppController],
提供者:[AppService],
})
导出类AppModule{}
将缓冲区转换为流,并引导其上载

import { Injectable } from '@nestjs/common';
import { UploadApiErrorResponse, UploadApiResponse, v2 } from 'cloudinary';
import { Readable } from 'stream';

@Injectable()
export class CloudinaryService {
  async uploadImage(
    file: Express.Multer.File,
  ): Promise<UploadApiResponse | UploadApiErrorResponse> {
    return new Promise((resolve, reject) => {
      const upload = v2.uploader.upload_stream((error, result) => {
        if (error) return reject(error);
        resolve(result);
      });
      Readable.from(file.buffer).pipe(upload); // covert buffer to readable stream and pass to upload
    });
  }
}
从'@nestjs/common'导入{Injectable};
从“cloudinary”导入{UploadApiErrorResponse,UploadApiResponse,v2};
从“流”导入{Readable};
@可注射()
导出类CloudinaryService{
异步上传映像(
文件:Express.Multer.file,
):承诺{
返回新承诺((解决、拒绝)=>{
const upload=v2.uploader.upload_流((错误,结果)=>{
如果(错误)返回拒绝(错误);
决心(结果);
});
Readable.from(file.buffer).pipe(upload);//将缓冲区转换为可读流并传递到upload
});
}
}

如果您想先将其保存到本地目录,您可以这样做,但您需要通过
fs.createReadStream
从path读取文件,以生成一个流并将其上载到cloudinary



如果你不能让它工作,我可以上传一个示例到github供您交叉检查。

它说,
属性“createReadStream”在类型“File”上不存在。
我已经用我使用的类型更新了答案。仍然是相同的
文件。createReadStream不是一个函数
我将文件对象添加到问题中,即使它说
eNote:没有这样的文件或目录,打开文件名