导出S3同步配置 (exportSyncProviderS3)

POST /api/sync/exportSyncProviderS3

认证与权限

需要身份验证 (通过 API Token)。

需要管理员权限。

接口描述

此接口用于导出现有的 Amazon S3 云同步服务配置。

导出的配置是一个经过 AES 加密的 JSON 文件,该 JSON 文件被打包在一个 ZIP 压缩包内供用户下载。文件名格式为 siyuan-s3-YYYYMMDDHHMMSS.json.zip

如果当前没有配置 S3 服务,导出的将是一个包含空 S3 配置对象的加密文件。

注意:这是一个文件下载接口。成功调用后,浏览器将开始下载一个 ZIP 文件,而不是返回一个 JSON 响应体。

请求体参数

该接口不需要请求体参数。

请求体示例


{}
        

响应体说明

cURL 调用示例


# 执行此命令会将下载的 zip 文件保存为 output.zip
curl -X POST \
  http://127.0.0.1:6806/api/sync/exportSyncProviderS3 \
  -H 'Authorization: Token YOUR_API_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{}' \
  -o output-s3-config.zip
        

JavaScript 调用示例


async function exportS3Config() {
    try {
        const response = await fetch('/api/sync/exportSyncProviderS3', {
            method: 'POST',
            headers: {
                'Content-Type': 'application/json',
                'Authorization': 'Token YOUR_API_TOKEN' // 如果配置了API Token
            },
            body: JSON.stringify({})
        });

        if (response.ok && response.headers.get("Content-Type") === "application/octet-stream") {
            const contentDisposition = response.headers.get('Content-Disposition');
            let filename = 'siyuan-s3-config.zip'; // 默认文件名
            if (contentDisposition) {
                const filenameMatch = contentDisposition.match(/filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/i);
                if (filenameMatch && filenameMatch[1]) {
                    filename = filenameMatch[1].replace(/['"]/g, '');
                }
            }
            
            const blob = await response.blob();
            const url = window.URL.createObjectURL(blob);
            const a = document.createElement('a');
            a.style.display = 'none';
            a.href = url;
            a.download = filename;
            document.body.appendChild(a);
            a.click();
            window.URL.revokeObjectURL(url);
            a.remove();
            console.log('S3 配置导出成功,下载已开始。');
            document.getElementById('apiResponse').textContent = 'S3 配置导出成功,下载应该已经开始: ' + filename;
        } else {
            // 尝试解析可能的JSON错误响应
            const errorData = await response.json().catch(() => null);
            if (errorData && errorData.msg) {
                console.error('导出S3配置失败:', errorData.msg);
                document.getElementById('apiResponse').textContent = `错误 ${errorData.code}: ${errorData.msg}`;
            } else {
                console.error('导出S3配置失败,响应状态:', response.status);
                document.getElementById('apiResponse').textContent = `导出失败,状态码: ${response.status}`;
            }
        }
    } catch (error) {
        console.error('请求过程中发生错误:', error);
        document.getElementById('apiResponse').textContent = `请求错误: ${error.message}`;
    }
}
        

在线测试

状态:

点击按钮后,此处将显示操作状态。