无法通过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); } } } }
注意事项
- 所有配置项(连接字符串、接口地址等)需替换为你的实际信息
- 表单字段名(如
file)必须与Postman请求中的字段名完全一致 - 文件名需设置为你期望在CLM中显示的名称
- 文件MIME类型需根据实际文件类型调整(如Word文档用
application/vnd.openxmlformats-officedocument.wordprocessingml.document)
内容的提问来源于stack exchange,提问作者Piotr Krezel
相关产品推荐
相关产品推荐

