代码之家  ›  专栏  ›  技术社区  ›  FiveTools

如何从ASP.NET中的流安全地读取数据?

  •  1
  • FiveTools  · 技术社区  · 14 年前
    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();
    

    如果:

    在一次调用中从流中读取是非常危险的。您假设所有数据都将立即可用,但情况并非总是如此。你应该一直循环阅读,直到没有更多的数据。

    如何更改上述代码以使其“不那么危险”?

    1 回复  |  直到 14 年前
        1
  •  4
  •   Justin Niessner    14 年前

    乔恩·斯基特实际上有一篇非常好的博客文章,介绍了人们尝试阅读流的所有不同方式,以及为什么每个流都被破坏(以他认为是理想的解决方案结束):

    Reading binary data in C#