Skip to content
Advertisement

How do I safely read from a stream in asp.net?

byte[] bytes = new byte[uploader.UploadedFiles[0].InputStream.Length];
uploader.UploadedFiles[0].InputStream.Read(bytes, 0, bytes.Length);

var storedFile = new document();
string strFullPath = uploader.UploadedFiles[0].FileName;
string strFileName = Path.GetFileName(strFullPath);

storedFile.document_id = Guid.NewGuid();
storedFile.content_type = uploader.UploadedFiles[0].ContentType;
storedFile.original_name = strFileName;
storedFile.file_data = bytes;
storedFile.date_created = DateTime.Now;
db.documents.InsertOnSubmit(storedFile);
db.SubmitChanges();

If:

Reading from a stream in a single call to Read is very dangerous. You’re assuming all the data will be made available immediately, which isn’t always the case. You should always loop round, reading until there’s no more data.

How should I change the above code to make it ‘less dangerous’?

Advertisement

Answer

Jon Skeet actually has a really good blog post about all the different ways that people try to read Streams and why each one is broken (it ends with what he believes is the ideal solution):

Reading binary data in C#

User contributions licensed under: CC BY-SA
4 People found this is helpful
Advertisement