下载 - 外链方式
1.请求地址
GET http://apigate.hsifue.cn/gdoc/v3/doc/{wsId}/file/signedURL?fileId={fileId}&type={type}&versionIndex={versionIndex}&path=${path}&lease={lease}
2.请求头
| 名称 |
数据类型 |
是否必选 |
描述 |
| Authorization |
String |
是 |
Bearer ${SERVICE_TOKEN} |
| Content-Type |
String |
是 |
application/octet-stream |
3.参数解释
| 参数名 |
是否必选 |
类型 |
描述 |
| wsId |
是 |
String |
空间ID |
| fileId |
是 |
String |
文件ID |
| type |
否 |
enum |
PUBLIC 或者PRIVATE。默认为PUBLIC。PRIVATE仅用于下载文件的客户端与云文档服务在同一个阿里云VPC时,通过VPC内网访问OSS |
| behavior |
否 |
enum |
默认是DOWNLOAD 表示用来下载的地址;可选BROWSER_PREVIEW 对于图片、pdf、txt等文件类型,可以直接支持浏览器预览 |
| versionIndex |
否 |
Integer |
默认指当前最新版本 |
| path |
否 |
String |
该接口同时支持通过fileId和path获取signedUrl,fileId和path单独传哪个参数, 就按其获取, 如果两者都传,则按照fileId获取 |
| lease |
否 |
Integer |
租期,单位秒,多少秒后URL失效 |
4. 返回信息
{
"code": 0, //成功返回0
"message": "success",
"data": {
"fileId": "ea43c8cb255c407aaec9382be0bc9670", //文件ID
"name": "test", //文件名称,包括后缀
"workspaceId": "bd71afd7c0644e67bad7e7e0ff9ef795", //所属空间ID
"versionIndex": "1",
"signedURL":"http://gly-dev-gdoc.oss-cn-shanghai.aliyuncs.com/9cuqEIB2oAZ3JhtinLfMRsZvXRG6q9A5/0aa438ce2a4f4aec851db19b35d315d9/wAfOhuuPWGgjcPZLjUhYUWfUoFoohdbx?Expires=1484035313&OSSAccessKeyId=W15XWpaVWekTzVUW&Signature=e7%2BqAvIYFpUrwiZ5MmFd9BS/wEc%3D"
}
}
5.常见异常码
| code |
message |
描述 |
cause |
| 19001 |
invalid file id[{0}] |
目录或文件不存在 |
如果参数是多个ID,只要其中一个ID不存在,则报错 |
19204 |
failed to get file signedURL |
获取签名URL失败 |
|
6.补充异常码
//COMMON ERROR CODE (101 000 xxx)
SUCCESS(0, "success", PassDocumentErrorType.GENERAL),
UNKNOWN_ERROR(10000, "unknown exception", PassDocumentErrorType.GENERAL),
DATABASE_ACCESS_ERROR(10001, "database access exception", PassDocumentErrorType.GENERAL),
ACCESS_FORBIDDEN(10004, "access forbidden {0}", PassDocumentErrorType.GENERAL),
FAILED_TO_GET_APP_ACCESS_TOKEN(10002, "failed to get gdoc app access token from ACCOUNT API {0}", PassDocumentErrorType.GENERAL),
INVALID_REQUESTS(10005, "invalid requests : {0}", PassDocumentErrorType.GENERAL),
APPKEY_NOT_MATCH(10006, "invalid appkey : {0}, target : {1}", PassDocumentErrorType.GENERAL),
CURRENT_OPERATION_NOT_SUPPORT(10007, "current operation [{0}] not support", PassDocumentErrorType.GENERAL),
EXCEEDED_MAX_CONCURRENT_REQUEST(10005, "exceeded max concurrent request", PassDocumentErrorType.GENERAL),
INVALID_OWNER_ID(101000001, "invalid owner id: [{0}]", PassDocumentErrorType.GENERAL),
BATCH_SIZE_LIMITED(101000002, "limited batch size, limit {0}, actual {1}", PassDocumentErrorType.GENERAL),
STORE_USAGE_CREATE_FAILED(101000003, "create store usage failed with wsId {}", PassDocumentErrorType.GENERAL),
STORE_USAGE_UPDATE_FAILED(101000004, "update store usage failed with wsId {}", PassDocumentErrorType.GENERAL),
LOCK_AND_EXECUTE_FAILED(101000005, "lock and execute failed", PassDocumentErrorType.GENERAL),
//FILE(101 001 xxx)
INVALID_FILE_ID(19001, "invalid file id[{0}]", PassDocumentErrorType.FILE),
PARENT_NOT_FOLDER(19002, "parent file [{0}] is not folder", PassDocumentErrorType.FILE),
IO_STREAM_EXCEPTION(19003, "io stream exception", PassDocumentErrorType.FILE),
NO_THUMBNAIL(19004, "thumbnail is not generated", PassDocumentErrorType.FILE),
INVALID_FILE_PATH(19005, "invalid file path[{0}]", PassDocumentErrorType.FILE),
FILE_EXIST(19006, "file[{0}] exist", PassDocumentErrorType.FILE),
FOLDER_EXIST(19007, "folder[{0}] exist", PassDocumentErrorType.FILE),
INVALID_REVISION_ID(19008, "invalid revision id[{0}]", PassDocumentErrorType.FILE),
INVALID_FILE_ID_OR_VERSION_INDEX(19009, "invalid file id[{0}] or version index[{1}]", PassDocumentErrorType.FILE),
UPLOAD_EMPTY_FILE(19010, "forbidden upload empty file", PassDocumentErrorType.FILE),
FILE_NUMBER_EXCEEDS(19011, "file number exceeds [{0}]", PassDocumentErrorType.FILE),
FILE_SIZE_EXCEEDS(19012, "file size exceeds [{0}]", PassDocumentErrorType.FILE),
NO_SUCH_FILE_OR_FOLDER(19013, "folder or file [{0}] does not exist", PassDocumentErrorType.FILE),
INVALID_FILE_NAME(19014, "invalid file name [{0}]", PassDocumentErrorType.FILE),
PARENT_NULL(19015, "the parent node [{0}] is null", PassDocumentErrorType.FILE),
NO_ENOUGH_SPACE(19016, "no enough space", PassDocumentErrorType.FILE),
FILE_NAME_TOO_LONG(19017, "file name too long", PassDocumentErrorType.FILE),
BATCH_FILES_NOT_IN_SAME_FOLDER(19018, "batch operate files not in same folder", PassDocumentErrorType.FILE),
TARGET_FOLDER_CANNOT_CHILD_OR_CURRENT(19019, "target folder can't be child or current", PassDocumentErrorType.FILE),
GET_FILE_STREAM_ERROR(19201, "failed to get file stream from backend storage service, file name: [{0}]", PassDocumentErrorType.FILE),
STORE_FILE_STREAM_ERROR(19202, "failed to upload file [{0}] to backend storage", PassDocumentErrorType.FILE),
INVALID_STORE_FILE_ID(19203, "invalid store file id, file name: [{0}]", PassDocumentErrorType.FILE),
FILENODE_DOES_NOT_EXIST(19132, "fileNode does not exist, fileId/filePath [{0}]", PassDocumentErrorType.FILE),
GET_FILE_SIGNEDURL_ERROR(19204, "failed to get file signedURL", PassDocumentErrorType.FILE),
ILLEGAL_FILENODE(19205, "fileNode does not exist or is a folder type", PassDocumentErrorType.FILE),
FOLDER_ONLY(19232, "fileNode {0} is not folder type", PassDocumentErrorType.FILE),
OWNER_ONLY(19233, "user {0} is not owner, owner {1}", PassDocumentErrorType.FILE),
BATCH_GET_FILE_META_NUM_EXCEED_MAX(19234, "failed to batch get file meta because of exceeding the max size", PassDocumentErrorType.FILE),
EXCEED_MAX_SIZE (19235, "batch operate has exceeded the max size:[{0}]", PassDocumentErrorType.FILE),
REQUEST_BODY_IS_EMPTY(19237, "request body should not be empty", PassDocumentErrorType.FILE),
PARENT_ID_AND_PATH_BOTH_EMPTY(19028, "parent id and path can not be empty", PassDocumentErrorType.FILE),
//还原文件
RESTORE_FILE_FAILED(101001002,"failed to restore file,containerId: {0},fileId: {1}",PassDocumentErrorType.FILE),
REQUEST_LOCK_TIMEOUT(19206, "distributed lock request timeout", PassDocumentErrorType.FILE),
CREATE_FOLDER_ERROR(19207, "failed to create folder {0}", PassDocumentErrorType.FILE),
FAILED_TO_UPDATE_REVISION_INFO(19209, "Failed to update file revision information like version alias or current, file revision id: [{0}]", PassDocumentErrorType.FILE),
NO_OR_INVALID_CONTAINER_ID_SPECIFIED(19210, "No container id or invalid container id is specified", PassDocumentErrorType.FILE),
INVALID_OR_NOT_A_TRASHED_ROOT_FILE(19211, "The specified file id is not valid or the target file is not a root trashed file", PassDocumentErrorType.FILE),
FILE_REV_ID_OR_FILE_ID_COULD_NOT_BE_EMPTY(19208, "file revision id or file id could not be empty", PassDocumentErrorType.FILE),
FILE_PATH_IS_EMPTY(19212, "the specified file path is empty", PassDocumentErrorType.FILE),
TOO_MANY_FILES_TO_DELETE(19213, "the number of files to be deleted is too large", PassDocumentErrorType.FILE),
TRASH_FILE_PATH_IS_NULL(19236, "the recorded path of trash file {} should not be empty", PassDocumentErrorType.FILE),
DELETE_FILE_GET_LOCK_ERROR(19238, "get lock failed when delete file [{0}] and cause by [{1}]", PassDocumentErrorType.FILE),
REQUEST_TOO_FAST(19239, "request frequency is too high", PassDocumentErrorType.FILE),
/**
* 前三位101表示是gdoc
* 中间三位001表示执行file操作
* 001表示删除file失败
* 示例:100002001表示删除gdoc file失败
*/
FAILED_TO_DELETE_FILE(101001001, "failed to delete files in the container [{0}]", PassDocumentErrorType.FILE),
TOO_MANY_DOWNLOADS(101001002, "too many download requests, limit {0}, current {1}, try later", PassDocumentErrorType.FILE),
TOO_MANY_UPLOADS(101001003, "too many upload requests, limit {0}, current {1}, try later", PassDocumentErrorType.FILE),
PRE_CHECK_FILE_UPLOAD_FAILED(101001004, "pre check file upload failed caused by [{0}]", PassDocumentErrorType.FILE),
CREATE_FOLDER_RENAME_TOO_MANY_TIMES(101001005, "failed to create folder with auto rename for rename {0} times", PassDocumentErrorType.FILE),
ORIGINAL_FILE_IS_FOLDER(101001006, "original file [{0}] is a folder", PassDocumentErrorType.FILE),
//SHARE(101 002 xxx)
INVALID_SHARE_TOKEN(19020, "invalid share token[{0}]", PassDocumentErrorType.SHARE),
SHARE_TOKEN_EXPIRED(19021, "share token[{0}] is expired", PassDocumentErrorType.SHARE),
SHARE_TOKEN_PASSWORD_WRONG(19022, "share token[{0}] password is wrong", PassDocumentErrorType.SHARE),
OTHER_SHARE_TOKEN(19023, "can't operate other's share token[{0}]", PassDocumentErrorType.SHARE),
EXPIRE_LATER_THAN_TODAY(19024, "expire time later than today", PassDocumentErrorType.SHARE),
NO_PRIVILEGE(19025, "no privilege [{0}]", PassDocumentErrorType.SHARE),
FILE_NOT_SHARED(19026, "file [{0}] is not shared in share [{1}]", PassDocumentErrorType.SHARE),
NO_SHARED_FILE_ID_PROVIDED(19027, "No shared file id found", PassDocumentErrorType.SHARE),
NO_SIGNED_URL_WITH_FOLDER(19028, "could not obtain signed url for a folder [{0}] with share token [{1}]", PassDocumentErrorType.SHARE),
SHARE_FILE_DOWNLOAD_ERROR(19029, "failed to download share file id [{0}] with share token [{1}]", PassDocumentErrorType.SHARE),
//PRIVILEGE(101 003 xxx)
NO_PERMISSION_ACCESS_FILE(19060, "user [{0}] has no permission to access file [{1}]", PassDocumentErrorType.PRIVILEGE, "操作失败!您无权进行操作!"),
NO_PERMISSION_ACCESS_FILE_BLACK_LIST(19068, "user [{0}] has black list to access file [{1}], required privilege [{2}]", PassDocumentErrorType.PRIVILEGE),
GRAND_PRIVILEGE_FAILURE(19061, "grant privilege failure [{0}]", PassDocumentErrorType.PRIVILEGE),
FAIL_TO_GET_WORKSPACE_QUOTA(19062, "fail to get workspace[{0}] quota", PassDocumentErrorType.PRIVILEGE),
GDOC_READONLY(19063, "gdoc[{0}] is readonly, the corresponding workspace may have been expired.", PassDocumentErrorType.PRIVILEGE),
GDOC_INACTIVE(19067, "gdoc[{0}] is inactive, the corresponding workspace may have been expired.", PassDocumentErrorType.PRIVILEGE),
NO_PERMISSIONS_SET_ON_NODE(19064, "this node[{0}] is not set permissions", PassDocumentErrorType.PRIVILEGE),
USER_NO_PERMISSION(19065, "this user[{0}] is not permission", PassDocumentErrorType.PRIVILEGE),
USER_NOT_IN_WORKSPACE(19066, "user[{0}] is not belong to workspace[{1}]", PassDocumentErrorType.PRIVILEGE),
//COMMENT(101 004 xxx)
COMMENT_SIZE_EXCEEDS(19080, "comment size exceeds [{0}]", PassDocumentErrorType.COMMENT),
FILE_ID_EMPTY(19081, "file id is empty", PassDocumentErrorType.COMMENT),
COMMENT_CONTENT_EMPTY(19082, "comment content is empty", PassDocumentErrorType.COMMENT),
FAILED_TO_INSERT_COMMENT(19083, "failed to insert comment to database", PassDocumentErrorType.COMMENT),
COMMENT_NOT_EXIST(19084, "comment [{0}] does not exist", PassDocumentErrorType.COMMENT),
FAILED_TO_DELETE_COMMENT(19085, "failed to delete comment [{0}] from database", PassDocumentErrorType.COMMENT),
NO_PERMISSION_DELETE_COMMENT(19086, "with no permission to delete comment", PassDocumentErrorType.COMMENT),
COMMENT_NOT_BELONG_TO_FILE(19087, "comment not belong to the file[{}]", PassDocumentErrorType.COMMENT),
COMMENT_ID_OR_FILE_ID_EMPTY(19088, "check file comment,comment id or file id should not be empty fileId:{}, commentId:{}", PassDocumentErrorType.COMMENT),
//WORKSPACE(101 005 xxx)
FAILED_TO_ACCESS_WORKSPACE_API(19090, "fail to access workspace api, workspace id is {0}", PassDocumentErrorType.WORKSPACE),
FAILED_TO_GET_MEMBER_INFO(19091, "fail to get member info from workspace, code is {0} and message is {1}", PassDocumentErrorType.WORKSPACE),
FAILED_TO_GET_QUOTA(19092, "fail to get quota from workspace, code is {0} and message is {1}", PassDocumentErrorType.WORKSPACE),
FAILED_TO_SET_QUOTA(19093, "failed to set storeQuota for a repo {0}. {1}", PassDocumentErrorType.WORKSPACE),
//MODEL(101 006 xxx)
PREIVEW_NOT_SUPPORT(19100, "doesn't support previewing {0} file online", PassDocumentErrorType.MODEL),
//VIEWCODE(101 007 xxx)
VIEWCODE_EXPIRED(19130, "viewcode {0} is expired, please apply a new one", PassDocumentErrorType.VIEWCODE),
FOLDER_CANNOT_APPLY_VIEWCODE(19131, "cannot apply viewcode for a folder {0}", PassDocumentErrorType.VIEWCODE),
FAILED_TO_CALL_ORGANIZATION(19093, "fail to call organization, code is {0} and message is {1}", PassDocumentErrorType.ORGANZATION),
//DEPARTMENT OR MEMBER(101 008 xxx)
/**
* 获取部门下面的成员详情服务器异常
*/
GET_MEMBERINFO_PAGE_OF_DEPARTMENT_REMOTE_SERVICE_EXCEPTION(19200, "get member info page of department service exception.", PassDocumentErrorType.ORGANZATION),
/**
* 获取部门下面的成员详情客户端异常
*/
GET_MEMBERINFO_PAGE_OF_DEPARTMENT_CLIENT_EXCEPTION(19201, "get member info page of department client exception.", PassDocumentErrorType.ORGANZATION),
/**
* 获取成员服务器异常
*/
GET_MEMBER_REMOTE_SERVICE_EXCEPTION(19202, "get member service exception. {0}", PassDocumentErrorType.ORGANZATION),
/**
* 获取成员客户端异常
*/
GET_MEMBER_CLIENT_EXCEPTION(19203, "get member client exception. {0}", PassDocumentErrorType.ORGANZATION),
/**
* 成员详情不存在
*/
MEMBER_INFO_NOT_FOUND(19204, "member not found.", PassDocumentErrorType.ORGANZATION),
/**
* 获取指定角色成员服务器异常
*/
GET_MEMBERS_BY_ROLE_SERVICE_EXCEPTION(19205, "get members by row remote service exception.", PassDocumentErrorType.ORGANZATION),
/**
* 获取指定角色成员客户端异常
*/
GET_MEMBERS_BY_ROLE_CLIENT_EXCEPTION(19206, "get members by row client exception.", PassDocumentErrorType.ORGANZATION),
/**
* 获取子部门服务器异常
*/
GET_SUB_DEPARTMENTS_REMOTE_SERVICE_EXCEPTION(19207, "get sub deparments remote service exception.", PassDocumentErrorType.ORGANZATION),
/**
* 获取子部门客户端异常
*/
GET_SUB_DEPARTMENTS_CLIENT_EXCEPTION(19208, "get sub deparments client exception.", PassDocumentErrorType.ORGANZATION),
/**
* 服务器返回报文的时候,解析出错了
*/
REMOTE_RESULT_UNRECOGNIZED_EXCEPTION(19209, "remote result unrecognized excetion.", PassDocumentErrorType.ORGANZATION),
// repo & container(101 009 xxx)
INSERT_REPO_INTO_DB_ERROR(19210, "error while inset repo into DB", PassDocumentErrorType.REPO_CONTAINER),
NONROOT_CONTAINER_NEED_PARENT(19211, "should specify parent for non-root container", PassDocumentErrorType.REPO_CONTAINER),
ONLY_OPEN_CONTAINER_CAN_BE_CLOSE(19212, "only open container can be close", PassDocumentErrorType.REPO_CONTAINER),
FAILED_TO_UPDATE_CONTAINER(19213, "failed to update container", PassDocumentErrorType.REPO_CONTAINER),
INVALID_CONTAINER_ID(19214, "invalid container id {0}", PassDocumentErrorType.REPO_CONTAINER),
CONTAINER_STATUS_INVALID(19228, "invalid container id {0}, status {1}", PassDocumentErrorType.REPO_CONTAINER),
INSERT_CONTAINER_INTO_DB_ERROR(19215, "error while inset container into DB", PassDocumentErrorType.REPO_CONTAINER),
INVALID_CREATE_CONTAINER_REQUEST(19216, "invalid request of create container {0}", PassDocumentErrorType.REPO_CONTAINER),
INVALID_UPDATE_CONTAINER_REQUEST(19217, "invalid request of update container {0}", PassDocumentErrorType.REPO_CONTAINER),
INVALID_CREATE_REPO_REQUEST(19218, "invalid request of create repo {0}", PassDocumentErrorType.REPO_CONTAINER),
CONTAINER_NAME_EXISTS(19219, "container name exists : {0}", PassDocumentErrorType.REPO_CONTAINER),
FAILED_TO_COPY_CONTAINER(19220, "copy container failed : {0}", PassDocumentErrorType.REPO_CONTAINER),
UNSUPPORTED_OPERATION_ON_CONTAINER(19221, "unsupported operation for container : {0} ", PassDocumentErrorType.REPO_CONTAINER),
INVALID_REPO_ID(19230, "invalid repoId : {0} ", PassDocumentErrorType.REPO_CONTAINER),
/**
* 前三位101表示是gdoc
* 中间三位009表示repo或者container的操作
* 001表示删除repo失败
* 示例:101010001表示删除gdoc repo失败
*/
FAILED_TO_DELETE_REPO(101010001, "failed to delete repo [{0}]", PassDocumentErrorType.REPO_CONTAINER),
/**
* 获取orgGroup下面的部门
*/
GET_ORGGROUP_DEPARTMENTS_CLIENT_EXCEPTION(19222, "get orgGroup departments client exception. {0}", PassDocumentErrorType.ORGANZATION),
GET_ORG_CLIENT_EXCEPTION(19230, "get org client exception. {0}", PassDocumentErrorType.ORGANZATION),
ORGGROUP_DEPARTMENTS_NOT_FOUND(19223, "org group departments not found {0}", PassDocumentErrorType.ORGANZATION),
GET_ORGGROUP_DEPARTMENTS_REMOTE_SERVICE_ERROR(192224, "get orgGroup departments remote service error. {0}", PassDocumentErrorType.ORGANZATION),
MEMBERS_NOT_FOUND(19226, "members not found {0}", PassDocumentErrorType.ORGANZATION),
ORG_NOT_FOUND(19231, "members not found {0}", PassDocumentErrorType.ORGANZATION),
MEMBER_NOT_IN_ORGGROUP(19227, "user [{0}] is not a valid member in workspace [{1}]", PassDocumentErrorType.ORGANZATION),
USERID_NOT_MATCH_MEMBERID(19228, "userId [{0}] not match memberId [{1}]", PassDocumentErrorType.PRIVILEGE),
OPERATION_CODE_ALREADY_APPLIED(19229, "optCode already applied for path - {0}", PassDocumentErrorType.FILE),
//AppendFile(101 010 xxx)
APPENDFILE_DOES_NOT_EXIST_OR_EXPIRED(19500, "AppendFile does not exist, appendFileId [{0}, containerId[{1}]]", PassDocumentErrorType.APPENDFILE),
APPEND_POSITION_ERROR(19501, "error position to append upload, appendFileId[{0}, position [{1}]]", PassDocumentErrorType.APPENDFILE),
APPEND_UPLOAD_INTERRUPTED(19502, "append upload is interruped, appendFileId[{0}]", PassDocumentErrorType.APPENDFILE),
INVALID_APPENDFILE_LENGTH(19503, "length [{}] for appendFile is null or too long.the length maximum is 5GB ", PassDocumentErrorType.APPENDFILE),
//multi part upload(101 011 xxx)
INIT_MULTI_PART_UPLOAD_ERROR(19600, "init multiPart upload error with objectId[{}]", PassDocumentErrorType.MULTI_PART_UPLOAD),
GET_MULTI_PART_UPLOAD_SIGNED_URL_ERROR(19601, "get multiPart upload signed url error with objectId [{0}] and uploadId [{1}}", PassDocumentErrorType.MULTI_PART_UPLOAD ),
COMPLETE_MULTI_PART_UPLOAD_ERROR(19602, "complete multi part upload error with objectId [{0}] and uploadId [{1}}", PassDocumentErrorType.MULTI_PART_UPLOAD),
LIST_MULTI_PARTS_ERROR(19603, "list multi parts error objectId [{0}] and uploadId [{1}}", PassDocumentErrorType.MULTI_PART_UPLOAD),
GET_UPLOAD_ID_ERROR(19604, "there is no upload id with id [{0}}", PassDocumentErrorType.MULTI_PART_UPLOAD),
MULTI_PART_UPLOAD_PATH_ERROR(19605, "path [{0}]in this container[{1}] has unused upload id", PassDocumentErrorType.MULTI_PART_UPLOAD),
ABORT_MULTI_PART_UPLOAD_ERROR(19606, "abort multi part upload error ", PassDocumentErrorType.MULTI_PART_UPLOAD),
COMPLETE_MULTI_PART_UPLOAD_VALID_ERROR(19607,"complete multipart upload valid error with containerId [{0}] id [{1}] path [{2}] actualSumMultiPartLength [{3}] and expectSumMultiPartLength [{4}]",PassDocumentErrorType.MULTI_PART_UPLOAD),
// max code 19603 - edit this every time you add ErrorCode
// FileCommit TX start from 19700 (101 012 xxx)
INVALID_COMMIT(19700, "commit TX deleted/not OPEN/timeout - {0}", PassDocumentErrorType.FILE_COMMIT_TX),
COMMIT_RESOURCE_NOT_MATCH(19701, "commitId - [{0}], expected resource - {1}, actual resource - {2}", PassDocumentErrorType.FILE_COMMIT_TX),
RESOURCE_LOCKED(19702, "{0}", PassDocumentErrorType.FILE_COMMIT_TX),
TX_CHECK_FAILED(19703, "file tx resource - [workspaceId - {0}] check is FAILED, try later ", PassDocumentErrorType.FILE_COMMIT_TX),
FILE_BATCH_COPY_ERROR(19800, "batch copy file is FAILED, [{0}]", PassDocumentErrorType.FILE),
//file merge(101 012 xxx)
FILE_MERGE_CALL_NSS_CLIENT_ERROR(19801, "call nss client error when file merge with name [{0}]",PassDocumentErrorType.FILE),
FILE_MERGE_FC_ERROR(19802, "file merge function invoker error with fileMergeId [{0}]", PassDocumentErrorType.FILE),
FILE_MERGE_EXIST(19803, "current revision is merging with revisionId [{0}]", PassDocumentErrorType.FILE),
FILE_MERGE_INFO_NOT_EXIST(19804, "file merge info not exist with containerId [{0}], fileId [{1}] ,fileMergeId [{2}]", PassDocumentErrorType.FILE),
//File Lock(101 013 xxx)
FILE_HAVE_BEEN_LOCKED(19900, "current file [{0}] have been locked", PassDocumentErrorType.FILE),
FILE_LOCK_CONTAINER_ID_IS_NULL(19901, "container id should not be empty when check file lock", PassDocumentErrorType.FILE),
//Init appData (101 014 xxx)
INIT_APP_DATA_APP_NAME_IS_NULL(20000,"app name should not be empth when initializing app data",PassDocumentErrorType.FILE),
//image process
INVALID_IMAGE_PROCESS_PARAM(101001000, "invalid image process param for {0}", PassDocumentErrorType.IMAGE_PROCESSING),
EMPTY_IMAGE_PROCESS(101001001, "empty conversion is not support", PassDocumentErrorType.IMAGE_PROCESSING),
DOWNLOAD_PROCESS_IMAGE_ERROR(101001002, "download processed image error", PassDocumentErrorType.IMAGE_PROCESSING),
IMAGE_TRANSFER_NOT_FOUNT(101001003, "image transfer not fount, storeId:{0}, configId:{1}", PassDocumentErrorType.IMAGE_PROCESSING),
IMAGE_CONVERTING(101001004, "image is converting now, storeId:{0}, configId:{1}", PassDocumentErrorType.IMAGE_PROCESSING),
IMAGE_CONVERT_FAILED(101001005, "image convert failed, storeId:{0}, configId:{1}", PassDocumentErrorType.IMAGE_PROCESSING),
//file snapshot
INVALID_CONTAINER_OR_FILE_ID(101002001, "invalid container or file id", PassDocumentErrorType.FILE),
SNAPSHOT_ID_IS_EMPTY(101002002, "snapshot id is empty ", PassDocumentErrorType.FILE),
INVALID_FILE_SNAPSHOT(101002003, "invalid file snapshot {0} ", PassDocumentErrorType.FILE),
GET_COMMENT_SNAPSHOT_FAILED(101002004, "get comment detail failed when file snapshot with message {}", PassDocumentErrorType.COMMENT),
NO_SNAPSHOT_FOUND(101002005, "no snapshot found of share token [{0}]", PassDocumentErrorType.FILE),
GET_MARKUP_SNAPSHOT_FAILED(101002006, "get markup detail failed when file snapshot with message {}", PassDocumentErrorType.FILE),
SNAPSHOT_NOT_EXIST_IN_SHARE(101002007, "share [{0}] has no snapshot [{1}]", PassDocumentErrorType.FILE),
//share
INVALID_SHARE_TYPE(101003001, "invalid share type {0}", PassDocumentErrorType.FILE),
SOURCE_FILE_NOT_FOUND(101003002, "transfer source file not found, fileId: {0}, versionIndex: {1}", PassDocumentErrorType.FILE),
INVALID_TARGET_FOLDER(101003003, "invalid target parent folder [{}]", PassDocumentErrorType.FILE),
NOT_SNAPSHOT_SHARE(101003004, "not snapshot share [{0}]", PassDocumentErrorType.FILE);