如何将 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);
所以要么还没有人尝试过这样做,要么我只是没有在上面找到任何东西。上传文件的旧方法是这样的:
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);