diff --git a/README.md b/README.md index c87a7ed1..35667030 100644 --- a/README.md +++ b/README.md @@ -180,7 +180,7 @@ qiniu.compressImage(file, options).then(data => { * **bucket**: 上传的目标空间 * **file**: `File` 对象,上传的文件 - * **key**: 文件资源名 + * **key**: 文件资源名,为空字符串时则文件资源名也为空,为 `null` 或者 `undefined` 时则自动使用文件的 `hash` 作为文件名 * **token**: 上传验证信息,前端通过接口请求后端获得 * **config**: `object`,其中的每一项都为可选 diff --git a/package-lock.json b/package-lock.json index d3e84c56..864d83a2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "qiniu-js", - "version": "3.1.0", + "version": "3.1.1", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 7a6ec13c..4c14ce06 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "qiniu-js", "jsName": "qiniu", - "version": "3.1.0", + "version": "3.1.1", "private": false, "description": "Javascript SDK for Qiniu Resource (Cloud) Storage AP", "main": "lib/index.js", diff --git a/src/__tests__/utils.test.ts b/src/__tests__/utils.test.ts new file mode 100644 index 00000000..2421c4f5 --- /dev/null +++ b/src/__tests__/utils.test.ts @@ -0,0 +1,8 @@ +import { createLocalKey } from '../utils' + +describe('api function test', () => { + test('createLocalKey', () => { + expect(createLocalKey('test', null, 1024)).toMatch('qiniu_js_sdk_upload_file_name_test_size_1024') + expect(createLocalKey('test', 'demo', 1024)).toMatch('qiniu_js_sdk_upload_file_name_test_key_demo_size_1024') + }) +}) diff --git a/src/api.ts b/src/api.ts index 8fb8af0a..fc775815 100644 --- a/src/api.ts +++ b/src/api.ts @@ -43,9 +43,9 @@ export async function getUploadUrl(config: Config, token: string): Promise { - const url = `${uploadUrl}/buckets/${bucket}/objects/${urlSafeBase64Encode(key)}/uploads` + const url = `${uploadUrl}/buckets/${bucket}/objects/${key != null ? urlSafeBase64Encode(key) : '~'}/uploads` return utils.request( url, { @@ -90,7 +90,7 @@ export interface UploadChunkData { */ export function uploadChunk( token: string, - key: string, + key: string | null | undefined, index: number, uploadInfo: UploadInfo, options: Partial @@ -114,7 +114,7 @@ export type UploadCompleteData = any */ export function uploadComplete( token: string, - key: string, + key: string | null | undefined, uploadInfo: UploadInfo, options: Partial ): utils.Response { @@ -134,7 +134,7 @@ export function uploadComplete( */ export function deleteUploadedChunks( token: string, - key: string, + key: string | null | undefined, uploadinfo: UploadInfo ): utils.Response { const bucket = utils.getPutPolicy(token).bucket diff --git a/src/index.ts b/src/index.ts index 11a4598e..298a7bbf 100644 --- a/src/index.ts +++ b/src/index.ts @@ -17,7 +17,7 @@ const statisticsLogger = new StatisticsLogger() */ function upload( file: File, - key: string, + key: string | null | undefined, token: string, putExtra?: Partial, config?: Partial diff --git a/src/upload/base.ts b/src/upload/base.ts index b608c1e3..236e342b 100644 --- a/src/upload/base.ts +++ b/src/upload/base.ts @@ -44,7 +44,7 @@ export interface Config { export interface UploadOptions { file: File - key: string + key: string | null | undefined token: string putExtra?: Partial config?: Partial @@ -88,7 +88,7 @@ export default abstract class Base { protected putExtra: Extra protected xhrList: XMLHttpRequest[] = [] protected file: File - protected key: string + protected key: string | null | undefined protected aborted = false protected retryCount = 0 protected token: string diff --git a/src/utils.ts b/src/utils.ts index e8e3cfbe..64a374fc 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -53,8 +53,9 @@ export function setLocalFileInfo(localKey: string, info: LocalInfo) { } } -export function createLocalKey(name: string, key: string, size: number): string { - return `qiniu_js_sdk_upload_file_name_${name}_key_${key}_size_${size}` +export function createLocalKey(name: string, key: string | null | undefined, size: number): string { + const localKey = key == null ? '_' : `_key_${key}_` + return `qiniu_js_sdk_upload_file_name_${name}${localKey}size_${size}` } export function removeLocalFileInfo(localKey: string) {