【问题标题】:When is the file uploaded using FileUpload control?什么时候使用 FileUpload 控件上传文件?
【发布时间】:2012-09-28 17:27:20
【问题描述】:

如果您将 asp:FileUpload 控件放在页面上,请浏览到文件,然后提交表单。提交表单时文件是否上传到服务器?

我见过大量的文件上传示例,其中文件被传递到文件流并上传。

我不明白什么时候发生的。单击“上传”按钮后,代码将在服务器上执行。因此,FileUpload 控件使用 FileUpload.PostedFile(或 httpFileCollection)提供的文件(文件名?文件路径?)......是在提交表单时上传的吗?服务器如何访问客户端计算机上的文件,以便可以使用文件流上传。

我不明白。我一直在阅读文件流以块的形式传递(可以传递)数据 - 有助于绕过对文件大小等的限制。但是,正如我上面所说,文件何时/如何上传到服务器?

【问题讨论】:

    标签: asp.net .net file-upload


    【解决方案1】:

    <asp:FileUpload> 控件呈现<input type="file">,并将表单的内容类型设置为multipart/form-data

    当浏览器提交<form><input type="file"> 时,它会在HTTP POST 中将整个文件发送到服务器(这是内容类型的一部分)。

    【讨论】:

    • 感谢您的回答 - 所有文件流内容的意义何在?为什么不直接保存 HttpPostedFile 文件?而且我一直在查看代码以报告上传进度 - 而且,这似乎都使用 FileStream - 但是如果在发布表单时将文件一次性上传到服务器,这将如何工作?跨度>
    • 这里的代码:codeproject.com/Articles/106511/… 是否真的在监视文件从浏览器到服务器的移动?
    【解决方案2】:

    当您点击上传时,会提交 html 表单并向服务器发送 post 请求。

    它实际上并没有向您发送您可以直接存储的某种“文件”对象,只是以字节为单位的文件内容和一些元数据,如文件名。

    在服务器上,您必须处理此请求:您必须将字节读入实际文件以正确存储它。

    在您提到的示例中,这就是 HttpPostedFile 的用途。

    【讨论】:

    • HttpFileCollection hfc = Request.Files; HttpPostedFile hpf = hfc[0];字符串文件路径 = hpf.文件名; FileStream fs = new FileStream(FilePath, FileMode.Open, FileAccess.Read);您说“文件内容以字节为单位”在您发布时发送到服务器。在上面的代码中,如果文件内容已发送到服务器,那么将其发送到文件流有什么意义呢?当您可以轻松地执行此操作时:hpf.SaveAs(path + ReturnValue.ToString() + "\ \" + Path.GetFileName(hpf.FileName));
    • 将文件流读入文件和使用SaveAs 方法将字节存储到文件中。不同之处在于,通过文件流方法,您可以获得有关进度的一些信息。这就是示例的内容。
    猜你喜欢
    • 2012-12-27
    • 1970-01-01
    • 2015-07-09
    • 2018-01-31
    • 2013-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-22
    相关资源
    最近更新 更多