簡體   English   中英

C# 將物理文件轉換為iformfile

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM