[英].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.