如何将 IFormFile 保存到 SQLServer FileStream Table

How to Save IFormFile to SQLServer FileStream Table

所以要么还没有人尝试过这样做,要么我只是没有在上面找到任何东西。上传文件的旧方法是这样的:

public class FileStorage
{
    public string FileName { get; set; }
    public byte[] FileStore { get; set; }
}

[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Create(HttpPostedFileBase file)
{
    FileStorage fileAttachment = new FileStorage();
 
    using (Stream inputStream = file.InputStream)
    {
        MemoryStream memoryStream = inputStream as MemoryStream;
 
        //Check to see if stream returned is already a MemoryStream
        if(memoryStream == null)
        {
            memoryStream = new MemoryStream();
            inputStream.CopyTo(memoryStream);
        }
                
        fileAttachment.FileStore = memoryStream.ToArray();
        fileAttachment.FileName = file.FileName;
    }
 
    if (ModelState.IsValid)
    {
        db.FileAttachment.Add(fileAttachment);
        await db.SaveChangesAsync();
        return RedirectToAction("Index");
    }
 
    return RedirectToAction("Index");
}

我知道 .Net Core 使用 IFormFile 但我找到的所有用于保存它的资源都谈到将它保存到 Web 服务器上的 wwwroot 文件夹中。我已成功将文件传递到我的控制器,但无法弄清楚如何将其转换为 byte[] 以保存到数据库 FileStream table.

这是我当前的代码:

[HttpPost]
public async Task<IActionResult> Upload(IFormFile uploadFile)
{
    if (ModelState.IsValid)
    {
        var parsedContent = ContentDispositionHeaderValue.Parse(uploadFile.ContentDisposition);
        var fileName = Path.Combine(_hostingEnvironment.WebRootPath, "Uploads", parsedContent.FileName.Trim('"'));
        
        await uploadFile.SaveAsAsync(fileName);
        
    }

    return View("Index");
}

如何将其转换为与数据库一起使用 FileStream

关于如何写入SQL服务器的文件流的文章似乎很多,这里就不再赘述了。

IFormFile 有一个 CopyToAsync 方法可以使用。假设您获得了 SQL 服务器的文件流,所有需要做的就是

await formFile.CopyToAsync(targetSqlFileStream);