zoukankan      html  css  js  c++  java
  • WebForm(文件上传)

    文件上传控件:FileUpload

    一、基本上传

    1、准备阶段:(1)准备保存路径

    根目录:string s = "Uploads/aaa.txt";   上传的绝对路径:string path = Server.MapPath(s);

    2、上传
    FileUpload1.SaveAs(path);

    二、优化:

    1:保留文件原有的名字,防止覆盖
    解决:把路径中的文件名替换为控件选中的文件名
    string s = "Uploads/" + FileUpload1.FileName;

    2、文件名一样,会覆盖,造成文件丢失

    解决:文件名拼接时间和用户名
    string s = "Uploads/" + DateTime.Now.ToString("yyyyMMddhhmmssms") + Request.Cookies["user"].Value + FileUpload1.FileName;

    3、可以上传大文件,默认是4MB,4096KB

    方法:扩容

    在Web.config中的system.web标记中添加下面一句:
    <httpRuntime maxRequestLength="扩容大小" />

    注意:不要扩的太大,因为如果多人同时上传大文件,可能会造成服务器内存溢出,导致服务器崩溃。

    4、超过上传要求的大小,阻止上传并提示文件过大

    服务端限制:
    if (FileUpload1.PostedFile.ContentLength > 1024 * 1024 * 4)
    {
    Label1.Text = "文件过大!";
    return;
    }

    客户端限制:

    <script type="text/javascript">
    
        document.getElementById("Button1").onclick = function () {
            var fl = document.getElementById('FileUpload1');
            if (fl.value.length <= 0) {
                document.getElementById('Label1').innerHTML = "请先选择要上传的文件!";
                return false;
            }
            else {
                if (fl.files[0].size > 1024 * 1024 * 4) {
                    document.getElementById('Label1').innerHTML = "文件过大,不允许超过4MB大小!";
                    return false;
                }
            }
        }
    
    
    
    </script>

    上传文件设置:

    <asp:FileUpload ID="FileUpload1" accept=".jpg,.jpeg,.png" runat="server" /> 

    断点续传:

    using System; 
    using System.Data; 
    using System.Configuration; 
    using System.Collections; 
    using System.Web; 
    using System.Web.Security; 
    using System.Web.UI; 
    using System.Web.UI.WebControls; 
    using System.Web.UI.WebControls.WebParts; 
    using System.Web.UI.HtmlControls; 
    using System.IO; 
    public partial class DFile : System.Web.UI.Page 
    { 
    protected void Page_Load(object sender, EventArgs e) 
    { 
    } 
    protected void LinBtnDFile_Click(object sender, EventArgs e) 
    { 
    // 创建一比特数组 
    byte[] buffer = new Byte[10240]; 
    // 指定要下载文件的路径. 
    string filePath = @"D:爱智旮旯.rar"; 
    // 或取文件名包括扩展名 
    string fileName = Path.GetFileName(filePath); 
    Stream fileStream = null; 
    try 
    { 
    // 打开文件 
    fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read); 
    Response.Clear(); 
    // 获取文件的大小 
    long fileSize = fileStream.Length; 
    long sum = 0; 
    if (Request.Headers["Range"] != null) 
    { 
    Response.StatusCode = 206; // 表示返回到客户端的 HTTP 输出状态的整数。默认值为 200。 
    sum = long.Parse(Request.Headers["Range"].Replace("bytes=", "").Replace("-", "")); 
    } 
    if (sum != 0) 
    { 
    Response.AddHeader("Content-Range", "bytes " + sum.ToString() + "-" + ((long)(fileSize)).ToString() + "/" + fileSize.ToString()); 
    } 
    // 获取部分http头信息 
    Response.AddHeader("Content-Length", ((long)(fileSize - sum)).ToString()); 
    Response.ContentType = "application/octet-stream"; 
    //获取文件来源 
    Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(Request.ContentEncoding.GetBytes(fileName))); 
    // Response.Flush(); 
    fileStream.Position = sum; //设置当前流位置 
    fileSize = fileSize - sum; 
    // 当文件大小大于0是进入循环 
    while (fileSize > 0) 
    { 
    // 判断客户端是否仍连接在服务器 
    if (Response.IsClientConnected) 
    { 
    // 获取缓冲区中的总字节数. 
    int length = fileStream.Read(buffer, 0, 10240); 
    // 写入数据 
    Response.OutputStream.Write(buffer, 0, length); 
    // 将缓冲区的输出发送到客户端 
    Response.Flush(); 
    buffer = new Byte[10240]; 
    fileSize = fileSize - length; 
    } 
    else 
    { 
    //当用户断开后退出循环 
    fileSize = -1; 
    } 
    } 
    } 
    catch (Exception ex) 
    { 
    Response.Write("Error : " + ex.Message); 
    } 
    finally 
    { 
    if (fileStream != null) 
    { 
    //关闭文件 
    fileStream.Close(); 
    } 
    Response.End(); 
    } 
    } 
    }
    断点续传
  • 相关阅读:
    LinkedList源码解析
    HashMap源码解析
    HashMap和Hashtable区别
    arcgis api for js 之网络分析服务发布
    arcgis api for js 之发布要素服务
    arcis api for js 值 3.17 本地部署
    ArcGIS 产品体系结构
    layui select下拉框选项不显示
    windows10企业版2016长期服务版激活
    PHP常见的输出语句
  • 原文地址:https://www.cnblogs.com/hclyz/p/6912147.html
Copyright © 2011-2022 走看看