2017-5-27 WebForm 文件上传
文件上传
准备工作
1.文件上传的页面
2.上传文件要保存的文件夹
1.只要将文件传上来就行
//1、获取要上传的文件,并且知道要上传到服务器的路径
string s = "Uploads/aaa.txt";
//2、生成绝对路径
string path = Server.MapPath(s);
//3、上传
FileUpload1.SaveAs(path);
问题:文件类型保存不住,名字无法修改,覆盖已上传的文件
优化1:保留文件原有的名字
解决:把路径中的文件名替换为控件选中的文件名
string s = "Uploads/" + FileUpload1.FileName;
问题:文件名一样,会覆盖,造成文件丢失
解决:文件名拼接时间和用户名
string s = "Uploads/" + DateTime.Now.ToString("yyyyMMddhhmmssms") + Request.Cookies["user"].Value + FileUpload1.FileName;
问题:文件过大,但是还要上传
解决:不是特别大可以更改请求最大长度,
如果特别大:C#大文件断点续传
扩容:在web.config中的<system.web>标记中
<httpRuntime maxRequestLength="40960"/>
解决:限制上传文件的大小
服务端限制:
if (FileUpload1.PostedFile.ContentLength > 1024 * 1024 * 4)
{
Label1.Text = "文件过大!";
return;
}
客户端限制:
fl.files[0].size > 1024 * 1024 * 4
问题:限制上传文件的类型
<asp:FileUpload ID="FileUpload1" accept=".jpg,.jpeg,.png" runat="server" />
完整的文件上传代码:
html页面代码和js页面段限制:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title></title> </head> <body> <form id="form1" runat="server"> <div> <asp:FileUpload ID="FileUpload1" accept=".jpg,.png,.jpeg,.avi" runat="server" /> <asp:Button ID="Button1" runat="server" Text="保存" /> <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label> </div> </form> </body> </html> <script type="text/javascript"> var but = document.getElementById('Button1'); but.onclick = function () { var fu = document.getElementById('FileUpload1'); if (fu.value.length <= 0) { document.getElementById('Label1').innerText = "请先选择文件"; return false; } else { if (fu.files[0].size > 1024 * 1024 * 4) { document.getElementById('Label1').innerText = "文件过大,不能上传"; return false; } else { document.getElementById('Label1').innerText = fu.files[0].size; } } } </script>
后台端代码:
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { Button1.Click += Button1_Click; } void Button1_Click(object sender, EventArgs e) { //限制文件上传的大小,不超过4mb if (FileUpload1.PostedFile.ContentLength > 1024 * 1024 * 4) { Label1.Text = "文件过大,不予上传"; } Label1.Text = FileUpload1.PostedFile.ContentLength.ToString(); //获取要上传的路径,并且知道要上传到服务器的路径 放置上传文件的时候文字重复 DateTime.Now.ToString("yyyyMMddhhmmssms")+FileUpload1.FileName string ss = "images/" + DateTime.Now.ToString("yyyyMMddhhmmssms")+FileUpload1.FileName ; //生成绝对路径 string path = Server.MapPath(ss); //上传 FileUpload1.SaveAs(path); } }