账户与文档访问
从您的 API 账户所属的号码携转项目中下载现有附件。请从允许的 IP 地址通过 HTTPS 使用已启用的 API 账户。项目不得已被删除。文档 ID 仅在该项目内查找,并非全局公开下载链接。
确定要下载的文档
读取项目详情响应,并使用其中的 uploads 列表中的一条记录。该记录包含数字形式的 id、原始文件名、存储的扩展名和相对地址 download_url。请使用项目的 uniqueid 和该上传记录的 ID,不要使用项目的数字行 ID,也不要使用号码记录的行 ID。
仅以您配置的可信 API 主机为基准解析返回的相对 URL。下载需要相同的账户身份验证;文档元数据不会授予未经身份验证的访问权限。
发送请求并保存响应
将 PROJECT_ID 和 DOCUMENT_ID 设置为您账户所属项目中的相应值。对项目 ID 进行 URL 编码。本示例分别保存字节内容和响应头,并使用固定的本地输出文件名,而不直接信任附件的文件名。
curl --silent --show-error --user "$API_USER:$API_PASSWORD" \
--dump-header document-headers.txt \
--output porting-document.bin \
"https://api.multitel.net/v3/lnp/project/$PROJECT_ID/document/$DOCUMENT_ID"此请求使用 GET,不含请求体。它读取一个完整附件,没有此端点专用的分页机制、JSON 包装,也没有已记录的按字节范围下载约定。
二进制响应与响应头
成功时,响应体是经过旧版存储解码步骤后得到的附件存储字节,而非 base64,也不是 JSON 响应对象。该方法使用存储的文件名,去除双引号后发送附件类型的 Content-Disposition 响应头。无法保证该响应头采用符合标准的编码,也无法保证其值是安全的本地文件路径;请自行选择目标文件名。
| 存储的扩展名 | Content-Type |
|---|---|
| application/pdf | |
| png | image/png |
| jpg, jpeg | image/jpeg |
| doc | application/msword |
| 其他值 | application/octet-stream |
扩展名匹配不区分大小写。MIME 类型根据存储的扩展名选择,并非通过检查内容确定,也不保证文档有效。
验证下载的文件
- 同时检查 HTTP 状态和响应头。身份验证或查找错误可能返回 JSON 格式的 API 响应,而不是文件。不要将任何非空响应体或已保存的输出文件都视为成功下载的 PDF 文件。
- 如果响应体是 JSON 错误,请检查
status.code和status.msg。将错误输出与预期文档分开保存。 - 检查得到的文件是否非空,并且能否作为预期类型的文件打开。如果保留了原件,请先比较原件与副本的校验和,再使用副本。
- 如果结果为空、无效或与原件不同,请停止操作,并联系支持人员检查存储的附件。重复下载无法修复存储问题。
旧版存储兼容性
当前 API 上传路径以及已审查的门户和旧版上传写入组件,会将文档字节转义后存储。本下载操作会撤销该转义。针对实际处理程序的离线测试表明,对于这种存储格式,所有字节值和字面反斜杠都能保留。
这并不保证所有历史记录或从外部导入的记录都适用。处理程序始终对存储的二进制数据进行解码,不会检测记录是否在未按预期转义的情况下导入。当记录没有存储的二进制数据时,它也不会回退到文件路径。此类记录可能返回发生变化的字节或空字节内容。请验证结果,并让支持人员调查受影响的附件,不要修改客户文档,也不要认为元数据足以证明文件可用。
当前门户优先使用此 API 路由,并另有本地回退处理。通过门户成功下载,并不能证明每条旧版记录都可以直接通过此 API 下载。
错误与操作影响
如果项目不存在、已删除或不属于您的账户,将返回 API 代码 404,并附带找不到项目的消息。如果在本账户所属项目中找不到上传记录,将返回 API 代码 404,并附带找不到文档的消息。请同时阅读 API 错误响应体和 HTTP 状态。对于存在但缺少有效存储字节的记录,此处理程序没有专门且可靠的“未找到”响应。
已审查的端点只读取一个附件。它不会上传、修改或删除文档,不会提交号码携转请求,也不会从账户扣款。号码携转附件可能包含身份、账单或授权信息:请仅在获授权的账户工作流程中使用这些附件,不要将其放入公开日志、分析系统或文档截图。