[英].NET HttpClient Image Upload to PlantNet API
我正在尝试通过 .NET HttpClient 向 PlantNet API 发出请求。 我有一个 FileStream,我正在使用 StreamContent,当我在发送之前通过调试器查看内容时,它看起来不错。 但是 PlantNet 响应是Unsupported file type for image[0] (jpeg or png)
。 我尝试了我想到的一切,来自 VS Code Rest Client 的相同请求正在工作(使用相同的文件),如果 StreamContent 以某种方式与文件数据混淆,是否有人有任何想法?
HttpResponseMessage responseMessage;
using (MultipartFormDataContent content = new("abcdef1234567890")) //Fixed boundary for debugging
{
content.Add(new StringContent("flower"), "organs");
using Stream memStream = new MemoryStream();
await stream.CopyToAsync(memStream, cancellationToken);
StreamContent fileContent = new(memStream);
fileContent.Headers.ContentType = new MediaTypeHeaderValue("image/jpeg");
content.Add(fileContent, "images", fileName);
responseMessage = await _httpClient.PostAsync(url, content, cancellationToken);
}
注意: stream
是文件的流,在这种情况下,它来自使用IFormFile.OpenReadStream()
的 ASP.NET Core API 控制器,但我也尝试通过直接打开文件
new FileStream("path", FileMode.Open, FileAccess.Read)
在调试器content.ReadAsStringAsync()
解析为以下
--abcdef1234567890
Content-Type: text/plain; charset=utf-8
Content-Disposition: form-data; name=organs
flower
--abcdef1234567890
Content-Type: image/jpeg
Content-Disposition: form-data; name=images; filename=test-flower.jpeg; filename*=utf-8''test-flower.jpeg
--abcdef1234567890--
这对我来说看起来非常好,所以我的猜测是,文件二进制数据可能以某种方式在内容或其他内容中损坏? 当我将上述内容用于具有相同文件的 VS Code 休息客户端时,它可以工作,并且我从 PlantNet API 获得了成功的响应。
(背景:我在 Fedora Linux 上使用 .NET 6)
好的,我通过将副本删除到内存流来解决它。 这是需要的,因为一开始我直接打开文件进行调试,如果我不这样做,则会收到异常。 对我有用的代码是
HttpResponseMessage responseMessage;
using (MultipartFormDataContent content = new("abcdef1234567890"))
{
content.Add(new StringContent("flower"), "organs");
StreamContent fileContent = new(stream);
fileContent.Headers.ContentType = new MediaTypeHeaderValue("image/jpeg");
fileContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("form-data")
{
FileName = fileName,
Name = "images"
};
content.Add(fileContent, "images", fileName);
responseMessage = await _httpClient.PostAsync(url, content, cancellationToken);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.