2015-05-20 2 views
1

Я не могу написать InputStream (содержать содержимое содержимого) в базу данных как массив byte.InputStream to byte array вызывает исключение OutOfMemory

У меня был следующий код, но с большими файлами он sthrows OutOfMemoryExceptoin.

 var postedFile = HttpContext.Current.Request.Files["file"]; 
     byte[] fileContent; 
     using (MemoryStream ms = new MemoryStream()) 
     { 
      postedFile.InputStream.CopyTo(ms); //error occures here 
      fileContent = ms.ToArray(); 
     } 
     // updating entity with new filecontent using INSERT statement 

Можете ли вы предложить мне, как преобразовать InputStream правильно в массив байтов, так что я могу записать его в базу данных? Нам нужно поддерживать до 100 мб (изменить: я изменил файлы с 200 до 100).

P.S. Я знаю, что это очень большие файлы, но пока это единственный способ справиться с ними.

+0

Как вы загрузки в базу данных? В идеале вы найдете способ, который не требовал бы все в памяти за один раз ... –

+1

Ну, конечно. Хранение 200 мегабайт кусков в базе данных также довольно плохая идея. OOM в противном случае просто избегают, позволяя вашей программе работать как 64-битный процесс, удалять форсирование дрожания. –

+0

Прочитайте файл только для нескольких строк за раз. Каждый раз, когда вы читаете несколько строк, сохраняйте соответствующие данные в базе данных, а затем возвращайтесь к чтению следующих нескольких строк из файла. – Mecon

ответ

0
public byte[] FileToByteArray(string fileName) 
{ 
    byte[] buff = null; 
    FileStream fs = new FileStream(fileName, 
            FileMode.Open, 
            FileAccess.Read); 
    BinaryReader br = new BinaryReader(fs); 
    long numBytes = new FileInfo(fileName).Length; 
    buff = br.ReadBytes((int) numBytes); 
    return buff; 
} 

Попробуйте это и дайте мне знать, если он работает для вас ...... а за мной, он должен работать ....