Я создаю текстовый файл в процессе, который в конце перебирает список строк, которые были ему переданы, а через MemoryStream
и StreamWriter
он преобразует этот список в byte[]
.byte[]
затем сохраняется в базе данных Oracle с использованием типа данных BLOB
.Хотя он работает для большинства данных (обычно это тысячи строк. У меня было от 5000 до 40000, и это одинаковый результат, независимо от), у меня есть конкретный message
, который идет в конце, но он всегда отсутствует,Обычно последняя строка, которая заканчивается в файле, обрезается наполовину.
Функция, которая генерирует byte[]
:
public byte[] GenerateFileData()
{
var fileData = new byte[0];
using (var ms = new MemoryStream())
{
using (var sw = new StreamWriter(ms))
{
Messages.ForEach(x => sw.WriteLine(x)); // Messages is a list of strings in this class
fileData = ms.ToArray();
}
}
return fileData;
}
Функция, которая сохраняет byte[]
вбаза данных:
public void SaveLogFile(int entityId, byte[] fileData)
{
using (var context = new SomeDBContext())
{
var entity= context.SomeEntity.FirstOrDefault(x => x.Id == runId);
if(entity != null)
{
entity.LOG_FILE = fileData;
context.SaveChanges();
}
}
}
И, наконец, функция, которая превращает данные в файл:
[HttpGet]
public FileResult GetLogFile(int id = 0)
{
var fileData = new byte[0];
using (var context = new SomeDbContext())
{
var entity = context.SomeEntity.FirstOrDefault(x => x.Id == id);
fileData = entity.LOG_FILE;
}
var fileName = "SomethingSomething" + id.ToString();
return File(fileData, "text/plain", fileName);
}