如何向AWS中的Symantec Protection Engine发送Base64字符串或UTF-8 MemoryStream
问题根源与解决方案
1. Base64转换错误(核心问题)
你当前的代码把Base64字符串直接转成UTF-8字节数组,这相当于把Base64文本本身当成了文件内容,而非解码Base64得到原始文件的字节。这会导致API收到的是Base64格式的文本数据,而非实际需要扫描的文件内容,从而触发Unsupported Media Type错误。
正确的Base64解码方式应该用Convert.FromBase64String,而不是Encoding.UTF8.GetBytes:
// resumeFile是Base64字符串,先解码为原始文件的字节数组 byte[] fileBytes = Convert.FromBase64String(resumeFile); MemoryStream myMemoryStream = new MemoryStream(fileBytes);
2. 修正后的完整代码
替换错误的转换逻辑后,代码应该如下:
// resumeFile is a string in base64 byte[] fileBytes = Convert.FromBase64String(resumeFile); MemoryStream myMemoryStream = new MemoryStream(fileBytes); HttpResponseMessage response = new HttpResponseMessage(); Uri scanUrl = new Uri(hostUrl + "/api/Scan"); HttpClient client = new HttpClient(); var form = new MultipartFormDataContent(); var streamContent = new StreamContent(myMemoryStream); // 若知道原始文件的MIME类型,建议设置对应类型,比如PDF用"application/pdf",通用情况用"application/octet-stream" streamContent.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream"); form.Add(streamContent, "documents", fileName); form.Add(new StringContent("NONE"), "composite"); client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken); client.DefaultRequestHeaders.Add("Prefer", "respond-async"); response = await client.PostAsync(scanUrl, form); // 先检查响应状态码,再读取内容 string responseContent = await response.Content.ReadAsStringAsync(); Console.WriteLine($"响应状态码: {response.StatusCode}"); Console.WriteLine($"响应内容: {responseContent}"); // 只有当响应是JSON格式时再反序列化 if (response.Content.Headers.ContentType?.MediaType == "application/json") { dynamic parsed = JsonConvert.DeserializeObject(responseContent); Console.WriteLine(parsed); }
3. 如何获取详细错误信息
你之前无法查看parsed变量,可能是因为API返回的不是JSON格式(比如错误页面文本)。建议先直接输出响应的原始内容和状态码,不管格式如何,这样能看到API返回的具体错误描述:
- 先打印
response.StatusCode确认HTTP状态 - 打印
await response.Content.ReadAsStringAsync()的原始结果,这能直接看到API返回的所有错误细节,而不是只依赖反序列化后的对象
4. 额外注意事项
- 确保
fileName参数包含正确的文件扩展名(比如resume.pdf),部分API会通过扩展名辅助识别文件类型 - 如果原始文件有明确的MIME类型,替换
application/octet-stream为对应类型(比如Word文档用application/vnd.openxmlformats-officedocument.wordprocessingml.document),能提升API识别准确率
内容的提问来源于stack exchange,提问作者Mini Hulk
相关产品推荐
相关产品推荐

