Приложение / поток октетов, заполняющий последнюю строку файла значением NULL после загрузки - PullRequest
0 голосов
/ 21 мая 2019

Я пытаюсь загрузить файл .hex с сервера и сохранить его на компьютере пользователя.Размер файла чуть выше 2,4 МБ.После загрузки на пользовательский компьютер он получает до 4 МБ.Дополнительный размер получается из-за того, что последняя строка заполняется NULL.Число NULL точно соответствует количеству строк в файле - 50 строк => 50 NULL в конце (в моем случае 32898 строк (строк) => 32898 NULL в конце).

Я пытался удалить их, но безуспешно.Есть ли способ сделать это в текущем методе?Также приветствуются альтернативные способы использования метода FileResult.

public FileResult Download(string documentID) {

    byte[] buffer = null;

    using (FileStream fs = new FileStream("C:\\Temp\\temp\\" + documentID + ".hex", FileMode.Open, FileAccess.Read)) {
        buffer = new byte[fs.Length - fs.Position];
        fs.Read(buffer, 0, (int)fs.Length);
    }

    var cd = new System.Net.Mime.ContentDisposition {
        FileName = "HEX_FILE_NAME.hex",
        Inline = false,
    };
    Response.AppendHeader("Content-Disposition", cd.ToString());
    return File(buffer, "application/octet-stream");
}

Screenshot

1 Ответ

1 голос
/ 29 мая 2019

После большого количества ударов головой мне удалось найти решение моей проблемы.Файл загружается, и больше нет строки NULL.Протестировал это и на живом сервере.Работает и для других расширений файлов.Я оставлю решение здесь на случай, если оно кому-нибудь поможет в будущем.

public FileResult Download(string documentID) {

            string fileName = @"C:\\Temp\\temp\\" + documentID + ".hex";
            FileInfo fileInfo = new FileInfo(fileName);

            if (fileInfo.Exists) {
                Response.Clear();
                Response.AddHeader("Content-Disposition", "attachment; filename=" + fileInfo.Name);
                Response.AddHeader("Content-Length", fileInfo.Length.ToString());
                Response.Flush();
                Response.TransmitFile(fileInfo.FullName);
                Response.End();
            }

            return File(fileName, "application/octet-stream");
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...