首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >套接字挂在Nestjs中,以便向minio客户端上传文件。

套接字挂在Nestjs中,以便向minio客户端上传文件。
EN

Stack Overflow用户
提问于 2020-11-29 15:21:36
回答 1查看 843关注 0票数 0

我将文件上传到我的minio存储中,使用nestjs-minio-client

我将我的应用程序作为反向代理在Nginx后面的docker容器上运行。

minio存储位于另一个服务器上的另一个坞容器上。

上传过程工作良好和文件被正确地上传到存储。但问题是,经过一段时间后,,除非重新启动容器的,否则不能上传更多的文件。

这是由于套接字挂起

代码语言:javascript
复制
   [Nest] 20   - 11/29/2020, 12:36:57 PM   [ExceptionsHandler] socket hang up +899287ms
Error: socket hang up
    at connResetException (internal/errors.js:609:14)
    at TLSSocket.socketOnEnd (_http_client.js:459:23)
    at TLSSocket.emit (events.js:326:22)
    at endReadableNT (_stream_readable.js:1223:12)
    at processTicksAndRejections (internal/process/task_queues.js:84:21)

下面是我的实现:

我已经在我的模块中导入了minioModule:

代码语言:javascript
复制
import { MinioModule } from 'nestjs-minio-client';

@Module({
         imports: [ MinioModule.register({
                                    endPoint: minioConstants.MINIO_ENDPOINT,
                                    useSSL: true,
                                    accessKey: minioConstants.MINIO_ACCESSKEY,
                                    secretKey: minioConstants.MINIO_SECRETKEY,})],
          
         controllers: [...],
         providers: [...],
         exports: [...]

我就是这样在控制器中传递文件的(使用multer):

代码语言:javascript
复制
    @Put('/avatar')
    @UseInterceptors(FileInterceptor('avatar'))
    async uploadAvatar(
        @UploadedFile() avatarFile: IMulterFile
    ){
        return {data: await this.uploadService.uploadImage(avatarFile)}
    }

uploadService来了:

代码语言:javascript
复制
import { Injectable, Logger, HttpException, HttpStatus } from '@nestjs/common';
import { MinioService } from 'nestjs-minio-client';
import * as crypto from 'crypto'
import { IMulterFile } from '@shared/interfaces/file.interface';

@Injectable()
export class UploadService {
    private readonly baseBucket = 'users' //fix ==> read from env

    public get client() {
      return this.minio.client;
    }

    constructor(private readonly minio: MinioService) {}

    public async uploadImage(file: IMulterFile, baseBucket: string = this.baseBucket) {
      if(!(file.mimetype.includes('image/jpeg') || file.mimetype.includes('image/png'))) {
        throw new HttpException('Error uploading file', HttpStatus.BAD_REQUEST)
      }
      let temp_filename = Date.now().toString()
      let hashedFileName = crypto.createHash('md5').update(temp_filename).digest("hex");
      let ext = file.originalname.substring(file.originalname.lastIndexOf('.'), file.originalname.length);
      const metaData = {
        'Content-Type': file.mimetype,
        'X-Amz-Meta-Testing': 1234,
      };
      let filename = hashedFileName + ext
      const fileName: string = `${filename}`;
      const fileBuffer = file.buffer;
      await this.client.putObject(baseBucket,fileName,fileBuffer,metaData)

    return {filename}
  }

  async delete(objetName: string, baseBucket: string = this.baseBucket) {
    await this.client.removeObject(baseBucket, objetName);
  }
}

我也尝试过内斯米尼奥作为客户端,但是在使用容器的一段时间后也会出现同样的问题。

对于为什么会发生这种情况,以及如何解决这一问题,有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-01 14:01:50

这很奇怪,但问题在于minio服务器本身!我在minio操场上尝试了这个代码,它运行得很好!因此,我们再次设置了minio实例的最新版本,现在一切都很好!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65061726

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档