1
0
Fork 0
mirror of https://github.com/immich-app/immich.git synced 2025-01-06 03:46:47 +01:00

fix(cli): upload large file with openAPI api (#5246)

* fix(cli): upload large file with openAPI

* function name

* fix: use boolean false

* chore: version bump

* fix: package-lock version

---------

Co-authored-by: Jonathan Jogenfors <jonathan@jogenfors.se>
This commit is contained in:
Alex 2023-11-21 15:09:19 -06:00 committed by GitHub
parent af1113bf9e
commit 8ff4a08a2c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 18 additions and 13 deletions

4
cli/package-lock.json generated
View file

@ -1,12 +1,12 @@
{ {
"name": "@immich/cli", "name": "@immich/cli",
"version": "2.0.3", "version": "2.0.4",
"lockfileVersion": 2, "lockfileVersion": 2,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "@immich/cli", "name": "@immich/cli",
"version": "2.0.3", "version": "2.0.4",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"axios": "^1.6.2", "axios": "^1.6.2",

View file

@ -1,12 +1,16 @@
{ {
"name": "@immich/cli", "name": "@immich/cli",
"version": "2.0.3", "version": "2.0.4",
"description": "Command Line Interface (CLI) for Immich", "description": "Command Line Interface (CLI) for Immich",
"main": "dist/index.js", "main": "dist/index.js",
"bin": { "bin": {
"immich": "./dist/src/index.js" "immich": "./dist/src/index.js"
}, },
"license": "MIT", "license": "MIT",
"keywords": [
"immich",
"cli"
],
"dependencies": { "dependencies": {
"axios": "^1.6.2", "axios": "^1.6.2",
"byte-size": "^8.1.1", "byte-size": "^8.1.1",
@ -77,7 +81,7 @@
}, },
"repository": { "repository": {
"type": "git", "type": "git",
"url": "git+https://github.com/immich-app/immich.git", "url": "github:immich-app/immich",
"directory": "cli" "directory": "cli"
} }
} }

View file

@ -11,6 +11,7 @@ import {
UserApi, UserApi,
} from './open-api'; } from './open-api';
import { ApiConfiguration } from '../cores/api-configuration'; import { ApiConfiguration } from '../cores/api-configuration';
import FormData from 'form-data';
export class ImmichApi { export class ImmichApi {
public userApi: UserApi; public userApi: UserApi;
@ -35,6 +36,7 @@ export class ImmichApi {
'x-api-key': apiKey, 'x-api-key': apiKey,
}, },
}, },
formDataCtor: FormData,
}); });
this.userApi = new UserApi(this.config); this.userApi = new UserApi(this.config);

View file

@ -8,11 +8,11 @@ export class Asset {
readonly path: string; readonly path: string;
readonly deviceId!: string; readonly deviceId!: string;
assetData?: File; assetData?: fs.ReadStream;
deviceAssetId?: string; deviceAssetId?: string;
fileCreatedAt?: string; fileCreatedAt?: string;
fileModifiedAt?: string; fileModifiedAt?: string;
sidecarData?: File; sidecarData?: fs.ReadStream;
sidecarPath?: string; sidecarPath?: string;
fileSize!: number; fileSize!: number;
albumName?: string; albumName?: string;
@ -30,13 +30,13 @@ export class Asset {
this.fileSize = stats.size; this.fileSize = stats.size;
this.albumName = this.extractAlbumName(); this.albumName = this.extractAlbumName();
this.assetData = await this.getFileObject(this.path); this.assetData = this.getReadStream(this.path);
// TODO: doesn't xmp replace the file extension? Will need investigation // TODO: doesn't xmp replace the file extension? Will need investigation
const sideCarPath = `${this.path}.xmp`; const sideCarPath = `${this.path}.xmp`;
try { try {
fs.accessSync(sideCarPath, fs.constants.R_OK); fs.accessSync(sideCarPath, fs.constants.R_OK);
this.sidecarData = await this.getFileObject(sideCarPath); this.sidecarData = this.getReadStream(sideCarPath);
} catch (error) {} } catch (error) {}
} }
@ -48,19 +48,18 @@ export class Asset {
if (!this.deviceId) throw new Error('Device id not set'); if (!this.deviceId) throw new Error('Device id not set');
return { return {
assetData: this.assetData, assetData: this.assetData as any,
deviceAssetId: this.deviceAssetId, deviceAssetId: this.deviceAssetId,
deviceId: this.deviceId, deviceId: this.deviceId,
fileCreatedAt: this.fileCreatedAt, fileCreatedAt: this.fileCreatedAt,
fileModifiedAt: this.fileModifiedAt, fileModifiedAt: this.fileModifiedAt,
isFavorite: false, isFavorite: false,
sidecarData: this.sidecarData, sidecarData: this.sidecarData as any,
}; };
} }
private async getFileObject(path: string): Promise<File> { private getReadStream(path: string): fs.ReadStream {
const buffer = await fs.promises.readFile(path); return fs.createReadStream(path);
return new File([buffer], basename(path));
} }
async delete(): Promise<void> { async delete(): Promise<void> {