如何通过C#客户端向Forge(APS)的UploadObject接口传递Buffer参数
C#客户端上传二进制数据到NodeJS端点的实现方法
核心思路
你的NodeJS服务端uploadObject方法需要接收二进制Buffer参数,C#客户端只需将本地Inventor零件文件的二进制内容作为HTTP请求体发送,并配合正确的请求头即可。
请求结构说明
- 请求方法:POST(用于提交二进制数据)
- URL:需携带
bucketname和objectKey两个查询参数,格式如http://你的服务端域名/UploadObject?bucketname=目标桶名&objectKey=存储对象名 - 请求头:
Content-Type:application/octet-stream(标识请求体为二进制流)- 若服务端有额外身份验证需求,需添加对应头(如
Authorization)
- 请求体:Inventor零件文件的二进制字节数组
C#实现示例代码
using System; using System.IO; using System.Net.Http; using System.Threading.Tasks; public class ForgeUploadClient { // 复用HttpClient以提升性能 private static readonly HttpClient _httpClient = new HttpClient(); public async Task UploadInventorPartToAps(string serverEndpoint, string bucketName, string objectKey, string localFilePath) { try { // 1. 读取本地Inventor零件文件的二进制数据 byte[] fileBytes = await File.ReadAllBytesAsync(localFilePath); // 2. 构造完整请求URL(拼接查询参数) string requestUrl = $"{serverEndpoint}?bucketname={Uri.EscapeDataString(bucketName)}&objectKey={Uri.EscapeDataString(objectKey)}"; // 3. 构造请求内容(二进制数据) using var content = new ByteArrayContent(fileBytes); content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/octet-stream"); // 4. 发送POST请求 HttpResponseMessage response = await _httpClient.PostAsync(requestUrl, content); // 5. 处理响应(根据服务端返回逻辑调整) response.EnsureSuccessStatusCode(); // 抛出非2xx状态码异常 string responseContent = await response.Content.ReadAsStringAsync(); Console.WriteLine($"上传成功,服务端响应:{responseContent}"); } catch (Exception ex) { Console.WriteLine($"上传失败:{ex.Message}"); throw; } } } // 调用示例 // var client = new ForgeUploadClient(); // await client.UploadInventorPartToAps( // "http://你的服务端地址/UploadObject", // "my-bucket", // "sample-part.ipt", // @"C:\LocalFiles\sample-part.ipt" // );
关键细节说明
- HttpClient复用:避免每次请求创建新的HttpClient,防止Socket资源耗尽
- URL编码:用
Uri.EscapeDataString处理桶名和对象名中的特殊字符(如空格、中文) - 文件读取:使用
File.ReadAllBytesAsync异步读取文件,避免阻塞主线程 - 响应处理:
EnsureSuccessStatusCode会在服务端返回错误状态码时抛出异常,可根据需求调整错误处理逻辑
内容的提问来源于stack exchange,提问作者Mark Brouwers
相关产品推荐
相关产品推荐

