5

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

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表。

这是我当前的代码:

[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

4

1 回答 1

6

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

IFormFile有一个CopyToAsync你可以使用的方法。假设您掌握了 SQL Server 的文件流,所需要做的就是

await formFile.CopyToAsync(targetSqlFileStream);

于 2016-07-08T20:38:19.517 回答