Skip to content

Commit 2468fcc

Browse files
authored
feat: format Object key (#41)
remove `/` prefix string
1 parent dab2e15 commit 2468fcc

File tree

3 files changed

+21
-9
lines changed

3 files changed

+21
-9
lines changed

.github/workflows/nodejs.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ jobs:
4040
strategy:
4141
fail-fast: false
4242
matrix:
43-
node-version: [14, 16, 18, 20]
43+
node-version: [14, 16, 18, 20, 22]
4444
os: [ubuntu-latest]
4545

4646
steps:

src/client/Oss.ts

+18-7
Original file line numberDiff line numberDiff line change
@@ -46,14 +46,20 @@ export class Oss extends API {
4646
this.options = options;
4747
}
4848

49+
// https://github.com/node-modules/oss-client/blob/master/src/OSSObject.ts#L984
50+
#objectKey(key: string) {
51+
return key.replace(/^\/+/, '');
52+
}
53+
4954
private async* putObjectIterator(request: PutObjectRequest): AsyncGenerator<PutObjectInput> {
55+
const key = this.#objectKey(request.key);
5056
let hasChunk = false;
5157
for await (const chunk of request.body) {
5258
hasChunk = true;
5359
const req = new PutObjectInput();
5460
req.setStoreName(request.storeName);
5561
req.setBucket(request.bucket);
56-
req.setKey(request.key);
62+
req.setKey(key);
5763
req.setContentLength(request.contentLength);
5864
if (request.acl) {
5965
req.setAcl(request.acl);
@@ -88,7 +94,7 @@ export class Oss extends API {
8894
const req = new PutObjectInput();
8995
req.setStoreName(request.storeName);
9096
req.setBucket(request.bucket);
91-
req.setKey(request.key);
97+
req.setKey(key);
9298
req.setContentLength(request.contentLength);
9399
if (request.acl) {
94100
req.setAcl(request.acl);
@@ -152,10 +158,11 @@ export class Oss extends API {
152158
}
153159

154160
async get(request: GetObjectRequest): Promise<GetObjectResponse> {
161+
const key = this.#objectKey(request.key);
155162
const req = new GetObjectInput();
156163
req.setStoreName(request.storeName);
157164
req.setBucket(request.bucket);
158-
req.setKey(request.key);
165+
req.setKey(key);
159166
if (request.expectedBucketOwner) {
160167
req.setExpectedBucketOwner(request.expectedBucketOwner);
161168
}
@@ -232,10 +239,11 @@ export class Oss extends API {
232239
}
233240

234241
async copy(request: CopyObjectRequest): Promise<CopyObjectOutput.AsObject> {
242+
const key = this.#objectKey(request.key);
235243
const req = new CopyObjectInput();
236244
req.setStoreName(request.storeName);
237245
req.setBucket(request.bucket);
238-
req.setKey(request.key);
246+
req.setKey(key);
239247
const copySource = new CopySource();
240248
req.setCopySource(copySource);
241249
copySource.setCopySourceBucket(request.copySource.copySourceBucket);
@@ -261,10 +269,11 @@ export class Oss extends API {
261269
}
262270

263271
async head(request: HeadObjectRequest): Promise<HeadObjectOutput.AsObject> {
272+
const key = this.#objectKey(request.key);
264273
const req = new HeadObjectInput();
265274
req.setStoreName(request.storeName);
266275
req.setBucket(request.bucket);
267-
req.setKey(request.key);
276+
req.setKey(key);
268277
if (request.checksumMode) {
269278
req.setChecksumMode(request.checksumMode);
270279
}
@@ -316,10 +325,11 @@ export class Oss extends API {
316325
}
317326

318327
async delete(request: DeleteObjectRequest): Promise<DeleteObjectOutput.AsObject> {
328+
const key = this.#objectKey(request.key);
319329
const req = new DeleteObjectInput();
320330
req.setStoreName(request.storeName);
321331
req.setBucket(request.bucket);
322-
req.setKey(request.key);
332+
req.setKey(key);
323333
if (request.requestPayer) {
324334
req.setRequestPayer(request.requestPayer);
325335
}
@@ -376,10 +386,11 @@ export class Oss extends API {
376386
}
377387

378388
async signUrl(request: SignUrlRequest): Promise<SignURLOutput.AsObject> {
389+
const key = this.#objectKey(request.key);
379390
const req = new SignURLInput();
380391
req.setStoreName(request.storeName);
381392
req.setBucket(request.bucket);
382-
req.setKey(request.key);
393+
req.setKey(key);
383394
req.setMethod(request.method);
384395
req.setExpiredInSec(request.expiredInSec);
385396

test/unit/client/Oss.test.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@ describe.skip('client/Oss.test.ts', () => {
1919
const res = await client.oss.get({
2020
storeName: 'oss_demo',
2121
bucket: 'antsys-tnpmbuild',
22-
key: 'test.txt',
22+
// support prefix with `/`
23+
key: '/test.txt',
2324
});
2425
const buf: Uint8Array[] = [];
2526
for await (const chunk of res.object) {

0 commit comments

Comments
 (0)