如何将IFormFile保存到SQLServer FileStream表

时间:2016-07-07 17:02:31

标签: asp.net-core-mvc filestream sqlfilestream

所以要么没有人试图这样做,要么就是我没有找到任何东西。您上传文件的旧方法是:

import { provide } from '@angular/core';
describe('Dashboard Component', () => {
  beforeEachProviders(() => {
    return [
      provide(ProjectService, {
        useClass: MockProjectService
      })
    ];
  });

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

这是我目前的代码:

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");
}

如何将其转换为使用DB FileStream

1 个答案:

答案 0 :(得分:1)

由于似乎有很多关于如何写入SQL Server文件流的文章,我将在这里避免提及。

IFormFile有一个CopyToAsync方法,您可以使用它。让我们说你掌握了SQL Server的文件流,所有人都需要做的就是

await formFile.CopyToAsync(targetSqlFileStream);