mirror of
https://github.com/immich-app/immich.git
synced 2025-08-11 09:16:31 -04:00
wip
This commit is contained in:
parent
8108f50c4e
commit
93aaf92c55
@ -16,7 +16,9 @@ export class AssetUploadInterceptor implements NestInterceptor {
|
||||
const res = context.switchToHttp().getResponse<Response<AssetMediaResponseDto>>();
|
||||
|
||||
const checksum = fromMaybeArray(req.headers[ImmichHeader.Checksum]);
|
||||
console.log('AssetUploadInterceptor checksum:', checksum);
|
||||
const response = await this.service.getUploadAssetIdByChecksum(req.user, checksum);
|
||||
console.log('AssetUploadInterceptor response:', response);
|
||||
if (response) {
|
||||
res.status(200);
|
||||
return of({ status: AssetMediaStatus.DUPLICATE, id: response.id });
|
||||
|
@ -103,6 +103,24 @@ export class FileUploadInterceptor implements NestInterceptor {
|
||||
}
|
||||
|
||||
private filename(request: AuthRequest, file: Express.Multer.File, callback: DiskStorageCallback) {
|
||||
console.log('File upload started:', file.originalname);
|
||||
// @ts-expect-error abc
|
||||
request.emit = (eventName: string) => {
|
||||
console.log('File upload event emitted:', eventName);
|
||||
};
|
||||
request.on('close', () => {
|
||||
console.log('Request closed');
|
||||
});
|
||||
request.on('aborted', () => {
|
||||
console.log('Request aborted, cleaning up file');
|
||||
this.defaultStorage._removeFile(request, file, (error) => {
|
||||
if (error) {
|
||||
this.logger.warn('Request aborted, failed to cleanup file', error);
|
||||
} else {
|
||||
this.logger.log('Request aborted, file cleaned up successfully');
|
||||
}
|
||||
});
|
||||
});
|
||||
return callbackify(
|
||||
() => this.assetService.getUploadFilename(asRequest(request, file)),
|
||||
callback as Callback<string>,
|
||||
@ -128,8 +146,15 @@ export class FileUploadInterceptor implements NestInterceptor {
|
||||
|
||||
const hash = createHash('sha1');
|
||||
file.stream.on('data', (chunk) => hash.update(chunk));
|
||||
file.stream.on('error', (error) => {
|
||||
this.logger.warn('Stream error while uploading file, cleaning up', error);
|
||||
this.assetService.onUploadError(request, file).catch(this.logger.error);
|
||||
callback(error);
|
||||
});
|
||||
console.log('File upload started:', file.originalname);
|
||||
this.defaultStorage._handleFile(request, file, (error, info) => {
|
||||
if (error) {
|
||||
console.error('Error handling file upload:', error);
|
||||
hash.destroy();
|
||||
callback(error);
|
||||
} else {
|
||||
|
@ -131,6 +131,7 @@ export class AssetMediaService extends BaseService {
|
||||
sidecarFile?: UploadFile,
|
||||
): Promise<AssetMediaResponseDto> {
|
||||
try {
|
||||
console.log(`Uploading asset: ${file.originalPath}, size: ${file.size}`);
|
||||
await this.requireAccess({
|
||||
auth,
|
||||
permission: Permission.AssetUpload,
|
||||
@ -138,20 +139,25 @@ export class AssetMediaService extends BaseService {
|
||||
ids: [auth.user.id],
|
||||
});
|
||||
|
||||
console.log(`User quota: ${auth.user.quotaSizeInBytes}, usage: ${auth.user.quotaUsageInBytes}`);
|
||||
this.requireQuota(auth, file.size);
|
||||
|
||||
console.log(`Asset type: ${file.originalName}, checksum: ${file.checksum}`);
|
||||
if (dto.livePhotoVideoId) {
|
||||
await onBeforeLink(
|
||||
{ asset: this.assetRepository, event: this.eventRepository },
|
||||
{ userId: auth.user.id, livePhotoVideoId: dto.livePhotoVideoId },
|
||||
);
|
||||
}
|
||||
console.log(`Creating asset with deviceAssetId: ${dto.deviceAssetId}, deviceId: ${dto.deviceId}`);
|
||||
const asset = await this.create(auth.user.id, dto, file, sidecarFile);
|
||||
|
||||
console.log(`Asset created with id: ${asset.id}, originalPath: ${asset.originalPath}`);
|
||||
await this.userRepository.updateUsage(auth.user.id, file.size);
|
||||
|
||||
return { id: asset.id, status: AssetMediaStatus.CREATED };
|
||||
} catch (error: any) {
|
||||
console.log(`Error uploading asset: ${error.message}, ${file.originalPath}`, error);
|
||||
return this.handleUploadError(error, auth, file, sidecarFile);
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user