2012-09-28 79 views
0

如果你在页面上放置一个asp:FileUpload控件,浏览到一个文件,然后提交表单。是在您提交表单时上传到服务器的文件?什么时候使用FileUpload控件上传文件?

我已经看到大量文件上传的例子,其中文件被传递到文件流并上传。

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

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

回答

1

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

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

+0

感谢您的回答 - 所有文件流的内容是什么?为什么不保存HttpPostedFile文件? 我一直在寻找代码来报告上传的进度 - 而且,这一切似乎都使用FileStream - 但是如果文件在发布表单时一次性上传到服务器,这将如何工作? –

+0

是代码在这里: http://www.codeproject.com/Articles/106511/Multiple-file-uploads-with-progress-bar-using-clas 实际上监视文件,因为它从浏览器移动到服务器? –

1

当你点击上传时,html表单被提交,并发送一个post请求到服务器。

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

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

在你提到的例子中,这是HttpPostedFile的用途。

+0

HttpFileCollection hfc = Request.Files; HttpPostedFile hpf = hfc [0]; string FilePath = hpf.FileName; FileStream fs = new FileStream(FilePath,FileMode.Open,FileAccess.Read); 你说当发布时,'文件的内容以字节为单位'被发送到服务器。在上面的代码中,如果文件内容已经发送到服务器,那么将它发送到文件流时有什么意义?当您可以轻松地做到这一点时: hpf.SaveAs(path + ReturnValue.ToString()+“ \\“+ Path.GetFileName(hpf.FileName)); –

+0

将文件流读入文件并使用SaveAs方法将字节存储到文件中。不同之处在于,使用文件流方法可以获得有关进度的一些信息。这就是这个例子。 – Anna

相关问题