• 在.NET2.0中上传文件操作(解决了上传文件大小和多文件限制)转



    1、首先确认有写的权限

    2、解决文件大小限制

    您可能没意识到,但对于可以使用该技术上载的文件的大小存在限制。默认情况下,使用 FileUpload 控件上载到服务器的文件最大为 4MB 左右。不能上载超过该限制的任何内容。

    然 而,关于 .NET 的重要一点是,它通常会提供一种规避限制的方法。您通常可以更改正在使用的默认设置。要更改大小限制,可以在 web.config.comments 文件(可以在 C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\CONFIG 的 ASP.NET 2.0 配置文件夹中找到)或应用程序的 web.config 文件中进行一些改动。

    在 web.config.comments 文件中,查找一个名为 <executionTimeout>的节点,如下所示:

    <httpRuntime 
    executionTimeout="110"
    maxRequestLength="4096"
    requestLengthDiskThreshold="80"
    useFullyQualifiedRedirectUrl="false"
    minFreeThreads="8"
    minLocalRequestFreeThreads="4"
    appRequestQueueLimit="5000"
    enableKernelOutputCache="true"
    enableVersionHeader="true"
    requireRootedSaveASPath="true"
    enable="true"
    shutdownTimeout="90"
    delayNotificationTimeout="5"
    waitChangeNotification="0"
    maxWaitChangeNotification="0"
    enableHeaderChecking="true"
    sendCacheControlHeader="true"
    apartmentThreading="false" />

    在这个节点上进行了许多操作,但负责上载文件大小的设置是 maxRequestLength 属性。默认情况下,该属性设置为 4096 千字节 (KB)。只需更改此值,就可以增加可上载到服务器的文件大小。如果想要允许将 10 兆字节 (MB) 的文件上载到服务器,则将 maxRequestLength 值设置为 11264,这意味着该应用程序允许将最大为 11000 KB 的文件上载到服务器。

    在 web.config.comments 文件中进行此改动会将该设置应用于服务器上的所有应用程序。如果要将该设置仅应用于正在使用的应用程序,则将该节点应用于应用程序的 web.config 文件,覆盖 web.config.comments 文件中的所有设置。请确保该节点位于配置文件中的 <system.web> 节点之间。

    与上载文件大小限制有关的另一个设置是赋给 <httpRuntime> 节点中 executionTimeout 属性的值。

    赋给 executionTimeout 属性的值是 ASP.NET 关闭前允许发生的上载秒数。如果要允许将更大的文件上载到服务器,则还要增加该值和 maxRequestLength 值。

    增加可上载文件大小的一个缺点是,存在通过发出大量请求来攻击服务器的黑客。要避免这种情况,可以减小允许上载的文件大小;否则,可能会发现数百个甚至上千个 10 MB 的请求访问您的服务器。

     

    3、同时上载多个文件

    目前为止,已经有几个不错的示例说明了如何不费周折地将文件上载到服务器。现在,让我们看看如何从一个页面将多个文件上载到服务器。

    Microsoft .NET Framework 中没有任何内置功能使您可以从一个 ASP.NET 页上载多个文件。然而,只需要少量工作,您就可以像过去使用 .NET 1.x 那样完成此任务。

    方法是将 System.IO 类导入到 ASP.NET 页中,然后使用 HttpFileCollection 类捕获通过 Request 对象发送来的所有文件。该方法使您可以从一个页面上载所需数量的文件。

    如果需要,您完全可以分别处理该页上的每个 FileUpload 控件,如清单 5 所示。

    清单 5. 分别处理每个 FileUpload 控件

     

    if (FileUpload1.HasFile) {
    // Handle file
    }

    if (FileUpload2.HasFile) {
    // Handle file
    }

    该方法有效,但可能存在这种情况:您要使用 HttpFileCollection 类处理文件,特别是在处理动态生成的服务器控件列表时。

    针对这种情况的示例,您可以生成一个 ASP.NET 页,该页有三个 FileUpload 控件和一个 Submit 按钮(使用 Button 控件)。用户单击 Submit 按钮并且文件被发布到服务器之后,隐藏的代码将文件保存到服务器上的特定位置。保存文件后,在 ASP.NET 页上显示已发布的文件信息(请参见清单 6)。

    清单 6. 将多个文件上载到服务器

     

    protected void Button1_Click(object sender, EventArgs e)
    {
    string filepath = "C:\\Uploads";
    HttpFileCollection uploadedFiles = Request.Files;

    for (int i = 0; i < uploadedFiles.Count; i++)
    {
    HttpPostedFile userPostedFile = uploadedFiles[i];

    try
    {
    if (userPostedFile.ContentLength > 0 )
    {
    Label1.Text += "File #" + (i+1) +
    "";
    Label1.Text += "File Content Type: " +
    userPostedFile.ContentType + "";
    Label1.Text += "File Size: " +
    userPostedFile.ContentLength + "kb";
    Label1.Text += "File Name: " +
    userPostedFile.FileName + "";

    userPostedFile.SaveAs(filepath + "\\" +
    System.IO.Path.GetFileName(userPostedFile.FileName));

    Label1.Text += "Location where saved: " +
    filepath + "\\" +
    System.IO.Path.GetFileName(userPostedFile.FileName) +
    "
    ";
    }
    }
    catch (Exception Ex)
    {
    Label1.Text += "Error: " + Ex.Message;
    }
    }
    }
  • 相关阅读:
    Java 并发编程(一):简介
    @程序员,你在颓丧的时候怎么办?
    @程序员,你该如何磨快你的锯子
    Java Socket:飞鸽传书的网络套接字
    Java -- JDBC 学习--使用 DBUtils
    Java -- JDBC 学习--数据库连接池
    Java -- JDBC 学习--批量处理
    Java -- JDBC 学习--事务
    Java -- JDBC 学习--处理Blob
    Java -- JDBC_DAO 设计模式
  • 原文地址:https://www.cnblogs.com/yangjunwl/p/921729.html
Copyright © 2020-2023  润新知