我将文件上传到我的minio存储中,使用nestjs-minio-client。
我将我的应用程序作为反向代理在Nginx后面的docker容器上运行。
minio存储位于另一个服务器上的另一个坞容器上。
上传过程工作良好和文件被正确地上传到存储。但问题是,经过一段时间后,,除非重新启动容器的,否则不能上传更多的文件。
这是由于套接字挂起。
[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:
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):
@Put('/avatar')
@UseInterceptors(FileInterceptor('avatar'))
async uploadAvatar(
@UploadedFile() avatarFile: IMulterFile
){
return {data: await this.uploadService.uploadImage(avatarFile)}
}uploadService来了:
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);
}
}我也尝试过内斯米尼奥作为客户端,但是在使用容器的一段时间后也会出现同样的问题。
对于为什么会发生这种情况,以及如何解决这一问题,有什么想法吗?
发布于 2020-12-01 14:01:50
这很奇怪,但问题在于minio服务器本身!我在minio操场上尝试了这个代码,它运行得很好!因此,我们再次设置了minio实例的最新版本,现在一切都很好!
https://stackoverflow.com/questions/65061726
复制相似问题