C# FileUpload使用过程遇到的问题

C# FileUpload 使用过程

从控件列表拖出FileUpload控件放在网页上面,运行网页,就可以进行文件选择了,很方便

先说说主要的属性、方法吧

FileUpload.FileName属性:该属性用于获取客户端上使用FileUpload控件上的文件的名称

FileUpload.SaveAs方法:使用FileUpload控件,将上传文件的内容保存到Web服务器上的制定路径。其语法如下:

Public void SaveAs(string filename)

参数filename:一个字符串,用于指定服务器上保存上传文件的位置的完整路径。

配置文件设定上传文件大小

有两种方法:
第一种,你可以写判断来决定是否上传

1
FileUpload1.PostedFile.ContentLength

第二种,你可以更改上传文件的大小的限制
在web.config中的
<system.web> </system.web内加入如下代码:

<httpRuntime
executionTimeout="600" maxRequestLength="951200"
useFullyQualifiedRedirectUrl="true" minFreeThreads="8"
/>
executionTimeout:表示允许执行请求的最大时间限制,单位为秒
maxRequestLength:指示 ASP.NET
支持的最大文件上载大小。该限制可用于防止因用户将大量文件传递到该服务器而导致的拒绝服务攻击。指定的大小以 KB 为单位。默认值为 4096 KB (4
MB)。好像最大可以改成2G吧

将一个文件上传到指定目录,非常方便,用FileUpload也非常简单。

可实际情况中,会需要一次性选择多个文件,上传多个文件,如果上传的是图片,还得增加预览功能,其次就是一个上传的进度条问题。

先说说选择多个文件吧,这是控件的问题,貌似修改不了,没办法,只能一次选择一个。

上传多个文件:页面加载时,就加载多个FileUpload控件,如果数目不确定,那就动态创建,然后动态创建过程中呢,并不是纯粹的直接构造一个FileUpload添加即可,而是需要走如下流程:1.清空显示FileUpload的区域。2.加载缓存中的FileUpload控件。3.构造一个新的FileUpload控件并添加到页面。4.将该区域的FileUpload重新全部储存在缓存中。


 1 /// <summary>
2 /// 添加FileUpload
3 /// </summary>
4 private void AddFileUpload()
5 {
6 // 清除表格原有内容
7 tab_FileUpload_Area.Rows.Clear();
8 // 加载缓存中的上传控件
9 GetFileUpload();
10 // 新增上传控件
11 InsertFileUploadToTable(new FileUpload());
12 // 保存当前页面的上传控件
13 SetFileUpload();
14 }
15
16 /// <summary>
17 /// 加载缓存中的FileUpload
18 /// </summary>
19 private void GetFileUpload()
20 {
21 ArrayList arrayList = new ArrayList();
22 if (Session["FilesControls"] != null)
23 {
24 arrayList = (ArrayList)Session["FilesControls"];
25 for (int i = 0; i < arrayList.Count; i++)
26 {
27 InsertFileUploadToTable((FileUpload)arrayList[i]);
28 }
29 }
30 }
31
32 /// <summary>
33 /// 保存当前页面的FileUpload控件
34 /// </summary>
35 private void SetFileUpload()
36 {
37 ArrayList arrayList = new ArrayList();
38
39 foreach (Control c in tab_FileUpload_Area.Controls)
40 {
41 if (c.GetType().ToString() == "System.Web.UI.HtmlControls.HtmlTableRow")
42 {
43 HtmlTableCell tabCell = (HtmlTableCell)c.Controls[0];
44 foreach (Control control in tabCell.Controls)
45 {
46 if (control.GetType().ToString() == "System.Web.UI.WebControls.FileUpload")
47 {
48 FileUpload f = (FileUpload)control;
49 arrayList.Add(f);
50 }
51 }
52 }
53 }
54
55 Session["FilesControls"] = arrayList;
56
57 }
58
59 /// <summary>
60 /// 创建FileUpload控件,并添加
61 /// </summary>
62 /// <param name="fileUpload"></param>
63 private void InsertFileUploadToTable(System.Web.UI.WebControls.FileUpload fileUpload)
64 {
65 HtmlTableRow tabRow = new HtmlTableRow();
66 HtmlTableCell tabCell = new HtmlTableCell();
67 tabCell.Controls.Add(fileUpload);
68 tabRow.Controls.Add(tabCell);
69 tab_FileUpload_Area.Rows.Add(tabRow);
70 }

这种操作呢,存在一个问题,就是在重新加载FileUpload的时候,会导致原来已经选择过的,也会被清空,从而需要重新选择。

针对这种情况,可以结合按钮进行触发FileUpload事件触发,然后label显示获取的路径,至于FileUpload则隐藏掉,后台进行路径保存,然后再加载,也可以达到效果。

1.页面增加FileUpload、出发按钮、显示路径的文本

1 <asp:FileUpload ID="fu_serverUpload" runat="server" Style="margin-left: -230px;" onpropertychange="show(this.value)" />
2 <input id="选择" type="button" value="选择图片文件" onclick="fileClickFun()" /><label id="lbl_showUrl"></label>

2.绑定按钮的单击触发事件

1 function fileClickFun() { 2
document.getElementById("fu_serverUpload").click(); 3
}

3.后台代码为FileUpload绑定事件

1 protected void Page_Load(object sender, EventArgs e)
2 {
3 this.fu_serverUpload.Attributes.Add("onchange", "label_text();");
4 }

4.获取图片路径,并在DIV中显示


 1 function label_text() {
2 var file_upl = document.getElementById(‘fu_serverUpload‘);
3
4 file_upl.select();
5
6 var realpath = document.selection.createRange().text;
7
8 document.getElementById("lbl_showUrl").innerHTML = document.getElementById("fu_serverUpload").value;
9
10 }

在获取路径这里呢,又存在一个问题,就是IE6以上的浏览器,会启用上传的保护机制,用户选择文件后,反馈回来的路径不是原始路径,而是C:\fakepath\XXXXXX这样的路径,当然,这种情况的解决办法呢,是需要客户在IE的安全设置里面进行设置,即可获取完成的路径。而在网上有网友说可以不设置,就能获取完整的,我试验之后,IE6可以,但是IE8、9还得设置之后才能获取。

设置步骤如下:工具
-> Internet选项 -> 安全 -> 自定义级别 ->
找到“其他”中的“将本地文件上载至服务器时包含本地目录路径”,选中“启用”即可。

在这里另外值得一提的是div显示图片,嘎嘎,似乎有防盗功能耶,显示之后,在网页上面不能选中,也不能另存,嘎嘎


 1 <script type="text/javascript">
2 function show(upimg) {
3 var dd = document.getElementById("divview");
4 dd.filters.item("DXImageTransform.Microsoft.AlphaImageLoader").src = upimg;
5 //dd.style.width = 166;
6 //dd.style.height = 190;
7
8 // 此行代码的效果是:限制图片的大小在设定宽度长度范围内,如果不增加该行代码,图片多少像素,则显示多大的图片
9 dd.filters.item("DXImageTransform.Microsoft.AlphaImageLoader").sizingMethod = ‘scale‘;
10 }
11 </script>

1 <div id="divview" style="filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=image); WIDTH: 166px; HEIGHT: 190px">
2 <!--用于显示图片-->
3 </div>

最后附上批量上传时,后台的处理过程


 1 /// <summary>
2 /// 保存图片到服务器
3 /// </summary>
4 /// <param name="sender"></param>
5 /// <param name="e"></param>
6 protected void btn_uploadFile_Click(object sender, EventArgs e)
7 {
8 string filePath = Server.MapPath("./") + "Pictures";
9
10 // 获取上传图片的集合
11 HttpFileCollection hfc = Request.Files;
12 for (int i = 0; i < hfc.Count; i++)
13 {
14 HttpPostedFile uHfc = hfc[i];
15 if (uHfc.ContentLength > 0)
16 {
17 // 上传图片的文件名
18 string fileName = uHfc.FileName;
19 uHfc.SaveAs(filePath + "\\" + System.IO.Path.GetFileName(uHfc.FileName));
20
21 }
22 }
23 }

以上东西,来自网上各种解答,只是我一次性遇到了这些问题,都在一篇里面搞定。如果还有什么其它问题,欢迎留言

时间: 2024-11-11 16:41:06

C# FileUpload使用过程遇到的问题的相关文章

使用Commons FileUpLoad组件实现文件上传功能

Commons 是Apache开放的源码组织的一个java子项目,该项目主要涉及一些开发中常用的模块,如文件上传,命令行处理,数据库连接池等.FileUpLoad就是其中的一个用于处理HTTP文件上传的子项目.Commons FileUpLoad组建具有以下几个特点: 1.使用简单:Commons FileUpLoad组件可以方便的嵌入JSP文件中,在JSP文件中仅编写少量代码就可完成文件上传功能,十分方便. 2.能够全程控制上传的内容:使用Commons FileUpLoad组件提供的对象及操

Apache FileUpload详细介绍

Apache FileUpload组件 在最初的 http 协议中,没有上传文件方面的功能.RFC1867("Form-based File Upload in HTML".)为 http 协议添加了这个功能.客户端的浏览器,如 Microsoft IE, Mozila, Opera 等,按照此规范将用户指定的文件发送到服务器.服务器端的网页程序,如 php, asp, jsp 等,可以按照此规范,解析出用户发送来的文件. 1.1.客户端 简单来说,RFC1867规范要求http协议增

FileUpload系列:(2)文件上传示例

示例 package com.rk.web.servlet; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException;

fileupload文件上传

在使用java开发文件上传时,网络上有很多不一样的工具.但是每次如果都需要开发一次,对于使用者来说,这个过程是浪费时间的.所以我们有必要选取其中一个适合自己的文件上传组件,然后对其进一步分装,形成自己的开发工具类.下面我针对自己的工程,对fileupload进行了封装. fileupload是apache的一个组件,要想使用fileupload,需要用到下面两个jar:commons-fileupload-1.3.1.jar,commons-io-1.1.jar(版本不一样,可能相关jar包不一

FileUpload控件实现单按钮图片自动上传并带预览显示

FileUpload控件实现单按钮图片自动上传并带预览显示 1.实现原理: FileUpload控件默认不支持服务端的ONCHANGE事件,此时用一种变通的方法借用客户端的onchange事件,调用__doPostBack方法来用LinkButton的OnClick事件模拟一个事件触发的过程,可以在LinkButton的OnClick事件中进行图片的上传,和预览加载. 2.关键代码:      页面代码: 1 <asp:FileUpload ID="fuPhoto" onchan

asp.net中fileupload上传文件的方法

FileUpload 控件显示一个文本框控件和一个浏览按钮,使用户可以选择客户端上的文件并将它上载到 Web 服务器.用户通过在控件的文本框中输入本地计算机上文件的完整路径(例如,C:\MyFiles\test.txt)来指定要上载的文件.用户也可以通过单击“浏览”按钮,然后在“选择文件”对话框中定位文件来选择文件. 用户选择要上载的文件后,FileUpload 控件不会自动将该文件保存到服务器.您必须显式提供一个控件或机制,使用户能提交指定的文件.例如,可以提供一个按钮,用户单击它即可上载文件

struts2的validate在使用过程中的一个问题

在项目中有一个新增客户信息的的功能: 1.在进入添加页面:add.jsp页面之前,要调用一个add_init.do来获取省份信息列表以供在add.jsp进行选择. 2.add页面填写完成以后,提交给addCustomer.do来进行数据库的操作, 在提交之前,要进行一次表单验证,用了STRUTS2的validation. <!-- 客户添加初始化 --> <action name="customer_init" class="cn.rf.hz.parkass

C#中使用FileUpload上传图片到SQL数据库中以image类型存储并使用Image控件显示注意事项

当我们需要以数据流存储图片到数据库中(而不是文件路径),需要考虑很多因素,不同的环境决定了采取不同方法. 1.将图片存入数据库.首先,当我们决定使用FileUpload上传图片,需要考虑,FileUpload的功能主要是在客户端选取图片,然后使用FileUpload的SaveAs方法将选取的图片的地址保存到服务器端保存,因为我们使用的数据流存储图片,所以没有必要将图片保存到服务器端. 其次,FileUpload没有像OpenDialog的.Filter方法过滤图片的格式,即实现打开对话框,只能选

ASP.Net中实现上传过程中将文本文件转换成PDF的方法

iTextSharp是一个常用的PDF库,我们可以使用它来创建.修改PDF文件或对PDF文件进行一些其他额外的操作.本文讲述了如何在上传过程中将文本文件转换成PDF的方法. 基本工作 在开始之前,我们需要从这个URL下载iTextSharp.除此之外,也可以使用”NuGet Package Manager” 将它从NuGet上下载到项目的解决方案中.下面通过屏幕截图来进行讲解. 代码 为了操作简洁,我设计了一个带上传控件和一个按钮的webform.HTML代码如下: <!DOCTYPE html