You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法通过CLM API向DocuSign上传PDF,求Azure Blob存储上传代码示例

问题描述
  • 负责集成CLM API,非专业开发人员,目前仅能创建名称正确的"dummy"文件,无法替换为目标文件
  • 当前使用同事提供的Postman集合配置,仅支持从本地路径上传文件,需求改为从Azure Blob Storage读取文件后上传
  • 已提供POST请求负载及文件上传前后大小参考
  • 寻求JavaScript或C#语言的代码示例

JavaScript(Node.js)示例

依赖@azure/storage-blob和axios库,核心逻辑是读取Azure Blob流并构造表单请求上传至CLM API:

const { BlobServiceClient } = require('@azure/storage-blob');
const axios = require('axios');
const FormData = require('form-data');

// 替换为你的实际配置
const AZURE_CONN_STR = '你的Azure存储连接字符串';
const CONTAINER_NAME = 'Blob容器名称';
const BLOB_FILE_NAME = '目标Blob文件名';
const CLM_UPLOAD_URL = 'CLM API上传接口地址';
const CLM_AUTH_TOKEN = 'CLM API授权Token(按需填写)';

async function uploadFromBlobToCLM() {
    // 初始化Azure Blob客户端
    const blobServiceClient = BlobServiceClient.fromConnectionString(AZURE_CONN_STR);
    const containerClient = blobServiceClient.getContainerClient(CONTAINER_NAME);
    const blobClient = containerClient.getBlobClient(BLOB_FILE_NAME);

    // 获取Blob可读流
    const downloadRes = await blobClient.download();
    const blobStream = downloadRes.readableStreamBody;

    // 构造表单数据(匹配Postman的请求结构)
    const formData = new FormData();
    // 表单字段名需与Postman中一致,文件名设置为你需要的目标文件名
    formData.append('file', blobStream, { filename: '最终显示的文件名.ext' });
    // 若有其他表单字段(如元数据、类型),按Postman配置添加
    // formData.append('documentType', 'contract');

    // 发送上传请求
    try {
        const res = await axios.post(CLM_UPLOAD_URL, formData, {
            headers: {
                ...formData.getHeaders(),
                'Authorization': `Bearer ${CLM_AUTH_TOKEN}`
            },
            maxContentLength: Infinity,
            maxBodyLength: Infinity
        });
        console.log('上传成功:', res.data);
    } catch (err) {
        console.error('上传失败:', err.response?.data || err.message);
    }
}

uploadFromBlobToCLM().catch(console.error);

C#示例

需安装NuGet包:Azure.Storage.Blobs和System.Net.Http,核心逻辑与JS示例一致:

using Azure.Storage.Blobs;
using System.Net.Http;
using System.Net.Http.Headers;
using System.IO;

class CLMBlobUploader
{
    static async Task Main(string[] args)
    {
        // 替换为你的实际配置
        string azureConnStr = "你的Azure存储连接字符串";
        string containerName = "Blob容器名称";
        string blobFileName = "目标Blob文件名";
        string clmUploadUrl = "CLM API上传接口地址";
        string clmAuthToken = "CLM API授权Token(按需填写)";

        // 初始化Blob客户端
        BlobServiceClient blobServiceClient = new BlobServiceClient(azureConnStr);
        BlobContainerClient containerClient = blobServiceClient.GetBlobContainerClient(containerName);
        BlobClient blobClient = containerClient.GetBlobClient(blobFileName);

        // 读取Blob流并构造表单请求
        using (var blobStream = await blobClient.OpenReadAsync())
        using (var formContent = new MultipartFormDataContent())
        {
            var fileContent = new StreamContent(blobStream);
            // 按需设置文件MIME类型,如PDF用"application/pdf"
            fileContent.Headers.ContentType = MediaTypeHeaderValue.Parse("application/octet-stream");
            // 表单字段名和文件名需匹配Postman配置
            formContent.Add(fileContent, "file", "最终显示的文件名.ext");
            // 添加其他表单字段(按需)
            // formContent.Add(new StringContent("contract"), "documentType");

            // 发送请求
            using (var httpClient = new HttpClient())
            {
                if (!string.IsNullOrEmpty(clmAuthToken))
                {
                    httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", clmAuthToken);
                }

                var response = await httpClient.PostAsync(clmUploadUrl, formContent);
                response.EnsureSuccessStatusCode();

                var responseMsg = await response.Content.ReadAsStringAsync();
                Console.WriteLine("上传成功: " + responseMsg);
            }
        }
    }
}

注意事项

  1. 所有配置项(连接字符串、接口地址等)需替换为你的实际信息
  2. 表单字段名(如file)必须与Postman请求中的字段名完全一致
  3. 文件名需设置为你期望在CLM中显示的名称
  4. 文件MIME类型需根据实际文件类型调整(如Word文档用application/vnd.openxmlformats-officedocument.wordprocessingml.document)

内容的提问来源于stack exchange,提问作者Piotr Krezel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 03:01:22