[英]C# Convert physical file to iformfile
我正在嘗試將物理 excel 文件讀取到 IFormFile 但是當我讀取它保留的文件時內容始終為空,顯示字節 0。我正在嘗試測試一種方法來讀取 excel 文件的內容。 有沒有人做過測試,設法將 excel 文件讀取到 iformfile,或者我如何編寫使用 epplus 讀取文件的單元測試?
服務測試.cs
[Fact]
public async Task saveFile_test()
{
string rootPath = Directory.GetCurrentDirectory();
string testAssetsFolder = @"Assets\";
string testFile = "test.xlsx";
string testFilePath = Path.Combine(rootPath, testAssetsFolder, testFile);
// Arrange.
var fileMock = new Mock<IFormFile>();
var physicalFile = new FileInfo(testFilePath);
var ms = new MemoryStream();
var writer = new StreamWriter(ms);
using (FileStream fs = physicalFile.OpenRead())
{
byte[] b = new byte[1024];
UTF8Encoding temp = new UTF8Encoding(true);
while (fs.Read(b, 0, b.Length) > 0)
{
writer.WriteLine(temp.GetString(b));
}
}
writer.Flush();
ms.Position = 0;
var fileName = physicalFile.Name;
//Setup mock file using info from physical file
fileMock.Setup(_ => _.FileName).Returns(fileName);
fileMock.Setup(_ => _.Length).Returns(ms.Length);
fileMock.Setup(m => m.OpenReadStream()).Returns(ms);
fileMock.Setup(m => m.ContentDisposition).Returns(string.Format("inline; filename={0}", fileName));
//...setup other members as needed
List<IFormFile> files = new List<IFormFile>();
files.Add(fileMock.Object);
await _service.saveFile(files, "directory", "subDirectory", default);
}
服務.cs
public async Task saveFile(List<IFormFile> files, string directory, string subDirectory, CancellationToken cancellationToken)
{
subDirectory = subDirectory ?? string.Empty;
var target = Path.Combine(directory, subDirectory);
Directory.CreateDirectory(target);
foreach (IFormFile file in files)
{
if (file.Length <= 0) return;
var filePath = Path.Combine(target, file.FileName);
using (var stream = new FileStream(filePath, FileMode.Create))
{
await file.CopyToAsync(stream, cancellationToken);
try
{
// add to read encoded 1252 values
using (var package = new ExcelPackage(stream))
{
// Express worksheet
ExcelWorksheet worksheet = package.Workbook.Worksheets["Express"];
int colCount = worksheet.Dimension.End.Column; //get Column Count
int rowCount = worksheet.Dimension.End.Row;
....
您應該能夠使用ExcelDataReader.ExcelReaderFactory
來實現這一點
using (var stream = file.OpenReadStream())
{
using (var reader = ExcelReaderFactory.CreateReader(stream))
{
reader.Read(); /* Header row - we ignore this */
do
{
while (reader.Read())
{
{
var username = reader.GetString(0);
var firstName = reader.GetString(1);
....
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.