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):