簡體   English   中英

支持.NET Core Web API 上傳圖片文件

[英]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 照片查看器屏幕截圖

任何幫助表示贊賞!

這里有兩個問題可能會引起混淆:

  1. 服務支持的媒體類型定義了可以正確上傳到服務器的數據格式。

  2. 上傳的圖像格式與源計算機上存儲的圖像不同,因為您的 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM