[英]Support image file upload in .NET Core Web API
我正在使用 .Net Core 開發 Web API,我需要允許客戶端上傳文件列表(主要是圖像)並將它們保存到服務器。
問題是當圖像上傳時,我嘗試從保存它的文件夾中打開它,它似乎已損壞並且其大小與初始大小不同。
這是我的控制器的代碼:
[Route("api/TestUpload")]
[Consumes("multipart/form-data")]
public class TestUploadController : Controller
{
private readonly IHostingEnvironment _env;
private readonly ApplicationContext _context;
public TestUploadController(ApplicationContext context, IHostingEnvironment env)
{
_context = context;
_env = env;
}
// GET: /<controller>/
public IActionResult Index()
{
return View();
}
[HttpPost("upload")]
public async Task<IActionResult> Post([FromForm]IList<IFormFile> files)
{
long size = files.Sum(f => f.Length);
var uploads = Path.Combine(_env.WebRootPath, "uploads");
foreach (var formFile in files)
{
if (formFile.Length > 0)
{
var filePath = Path.Combine(uploads, formFile.FileName);
using (var fileStream = new FileStream(Path.Combine(uploads, formFile.FileName), FileMode.Create))
{
await formFile.CopyToAsync(fileStream);
fileStream.Flush();
}
}
}
return Ok(new { size });
}
}
似乎可以正常上傳和保存的唯一文件是文本和 html 文件。 我試過用一個文件而不是一個列表,同樣的事情。
我已經嘗試了幾種代碼變體,但似乎都不起作用,我可能做錯了什么,但我無法弄清楚它是什么。
這是使用高級 REST 客戶端進行測試的屏幕截圖: ARC 屏幕截圖
這就是我所說的“它似乎已損壞”的意思: Windows 照片查看器屏幕截圖
任何幫助表示贊賞!
這里有兩個問題可能會引起混淆:
服務支持的媒體類型定義了可以正確上傳到服務器的數據格式。
上傳的圖像格式與源計算機上存儲的圖像不同,因為您的 WebAPI 不支持任何圖像媒體格式。
如果您的 WebAPI 客戶端 HTTP POST 消息包含有效載荷 - 圖像,則在 HTTP 標頭中,Content-Type 指定消息正文的格式。 這告訴 Web API 如何解析消息正文的內容。 例如,如果發送到 API 的 HTTP 發布消息包含 PNG 圖像,則 POST 請求可能具有以下標頭:
Content-Length: 95267
Content-Type: image/png
將正確的媒體格式屬性添加到您的 WebAPI 控制器類應該支持以它們的圖像格式表示:
[Route("api/TestUpload")] [Consumes("multipart/form-data")] [Consumes("image/jpg")] [Consumes("image/png")] [Consumes("image/gif")] public class TestUploadController : Controller { }
如果有任何進一步的問題或需要支持開箱即用的圖像格式,請創建從例如BufferedMediaFormatter
派生的自定義MediaFormatter
類並在您的項目中使用它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.