【问题标题】:Uploading files: FileUpload.SaveAs or manually writing FileUpload.FileBytes上传文件:FileUpload.SaveAs 或手动编写 FileUpload.FileBytes
【发布时间】:2013-05-08 08:35:57
【问题描述】:

使用FileUpload控件,请说明以下两种上传文件方式的区别:

1.使用FileUpload.SaveAs() 方法:

fileUploadControl.SaveAs(path)

2。使用File.WriteAllBytes()FileUpload.FileBytes将字节数组写入磁盘:

File.WriteAllBytes(path, fileUploadControl.FileBytes);

上传大文件时,这些比较如何?

【问题讨论】:

    标签: c# asp.net .net file-upload file-io


    【解决方案1】:

    它们都有不同的用途。
    SaveAs 让您可以直接保存为文件,而WriteAllBytes 为您提供内容的字节数组。

    您的文件上传控件只有在客户端上传文件后才会收到字节,因此上传速度不会有差异。

    字节数组是一种值类型,因此如果您要传递它的副本,请注意,每当您将其传递给函数时,它都会在内存中创建副本。

    当我想直接访问内存中的字节时,我会使用FileUpload.FileBytes,而当我只想将文件写入磁盘时,我会使用fileUploadControl.SaveAs

    【讨论】:

    • 那么如果用户必须上传一个 100mb 的文件,那么使用第二个选项会加载一个 100mb 字节的数组到服务器的内存中吗?第一个选项不会这样做?
    • 这 100MB 的文件在这两种情况下都在服务器内存中。但是当你传递字节数组时,你最终会创建每个 100MB 的副本。
    • 那么您将如何上传一个大文件(例如 1Gb)?有没有更好的方法将上传内容流式传输到磁盘,而不是在保存之前将所有数据保存在内存中?
    • 你不能在 html4 中做到这一点。在 html5 中,我猜你可以使用 websockets 来流式传输文件。
    • 参考一致性,哪个选项最适合上传文件。我使用 fileUploadControl.SaveAs(path) 有时这种方法会导致文件损坏。如果我使用第二种方法可以解决我的问题stackoverflow.com/questions/44387257/…
    猜你喜欢
    • 1970-01-01
    • 2016-02-10
    • 2020-07-01
    • 1970-01-01
    • 2021-08-14
    • 2020-01-14
    • 2015-10-27
    • 2017-12-25
    • 1970-01-01
    相关资源
    最近更新 更多