asp.net-mvc如何将一个文件转换为字节数组直接没有其路径 (而不保存文件)

发布时间: 2016/10/4 14:20:37
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

这里是我的代码︰

 public async Task<IActionResult> Index(ICollection<IFormFile> files)
    {
        foreach (var file in files)
            uploaddb(file);   
        var uploads = Path.Combine(_environment.WebRootPath, "uploads");
        foreach (var file in files)
        {
            if (file.Length > 0)
            {
                var fileName = ContentDispositionHeaderValue.Parse(file.ContentDisposition).FileName.Trim('"');

                await file.SaveAsAsync(Path.Combine(uploads, fileName));
}

现在我打算将此文件转换成字节数组使用这段代码中︰

   var filepath = Path.Combine(_environment.WebRootPath, "uploads/Book1.xlsx");
            byte[] fileBytes = System.IO.File.ReadAllBytes(filepath);
            string s = Convert.ToBase64String(fileBytes);

然后我把我的 nosql 数据库上传这段代码。这是所有工作的很好,但问题是我不想保存该文件。而不是我想要直接将文件上传到我的数据库。它可以是可能的如果我可以只是转换文件字节数组直接而不保存它。

 public async Task<IActionResult> Index(ICollection<IFormFile> files)
{
    foreach (var file in files)
        uploaddb(file);   
    var uploads = Path.Combine(_environment.WebRootPath, "uploads");
    foreach (var file in files)
    {
        if (file.Length > 0)
        {
            var fileName = ContentDispositionHeaderValue.Parse(file.ContentDisposition).FileName.Trim('"');

///Code to Convert the file into byte array
}

解决方法 1:

而不是作为一个字符串 (其中分配更多内存比需要可能无法工作如果二进制数据中有 null 字节) 保存数据,我会推荐一种方法更像是

foreach (var file in files)
{
  if (file.Length > 0)
  {
    using (var fileStream = file.OpenReadStream())
    using (var ms = new MemoryStream())
    {
      fileStream.CopyTo(ms);
      var fileBytes = ms.ToArray();
      string s = Convert.ToBase64String(fileBytes);
      // act on the Base64 data
    }
  }
}

同时,利益他人, IFormFile 记录在docs.asp.netGitHub上的源代码

官方微信
官方QQ群
31647020