这是我的代码:
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));
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在我使用以下代码将此文件转换为字节数组:
var filepath = Path.Combine(_environment.WebRootPath, "uploads/Book1.xlsx");
byte[] fileBytes = System.IO.File.ReadAllBytes(filepath);
string s = Convert.ToBase64String(fileBytes);
Run Code Online (Sandbox Code Playgroud)
然后我将此代码上传到我的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
}
Run Code Online (Sandbox Code Playgroud)
erd*_*mke 98
与将数据保存为字符串(分配比所需内存更多的内存,如果二进制数据中包含空字节可能无效)相反,我建议采用更像
foreach (var file in files)
{
if (file.Length > 0)
{
using (var ms = new MemoryStream())
{
file.CopyTo(ms);
var fileBytes = ms.ToArray();
string s = Convert.ToBase64String(fileBytes);
// act on the Base64 data
}
}
}
Run Code Online (Sandbox Code Playgroud)
此外,为了其他人的利益,IFormFile可以在GitHub上找到源代码
Roo*_*ian 30
你可以只写一个简单的扩展:
public static class FormFileExtensions
{
public static async Task<byte[]> GetBytes(this IFormFile formFile)
{
using (var memoryStream = new MemoryStream())
{
await formFile.CopyToAsync(memoryStream);
return memoryStream.ToArray();
}
}
}
Run Code Online (Sandbox Code Playgroud)
用法
var bytes = await formFile.GetBytes();
var hexString = Convert.ToBase64String(bytes);
Run Code Online (Sandbox Code Playgroud)
小智 5
您可以使用以下代码将其转换为字节数组:
foreach (var file in files)
{
if (file.Length > 0)
{
var fileName = ContentDispositionHeaderValue.Parse(file.ContentDisposition).FileName.Trim('"');
using (var reader = new StreamReader(file.OpenReadStream()))
{
string contentAsString = reader.ReadToEnd();
byte[] bytes = new byte[contentAsString.Length * sizeof(char)];
System.Buffer.BlockCopy(contentAsString.ToCharArray(), 0, bytes, 0, bytes.Length);
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
37613 次 |
| 最近记录: |