`
流星剑
  • 浏览: 94674 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

文件上传操作详细篇

    博客分类:
  • .net
阅读更多

问题一:文件大小的限制

默认情况下,asp.net的上传文件大小为2MB,一般情况下可以在配置文件(web.config)中自定义最大文件的值

<httpRuntime executionTimeout="300" maxRequestLength="4096" useFullyQualifiedRedirectUrl="false" />

这样上传文件的大小就变成了4Mb,可是不能无限的扩大maxRequestLength的值,因为asp.net会将全部文件载入内存后,再加以处理。可以用隐含的HttpWorkerRequest的GetPreloadedEntityBody(和ReadEntityBody)方法从IIS为asp.net建立的管道中分块读取数据

IServiceProvider provider=(IServiceProvider)HttpContext.Current;

HttpWorkerRequest wr=(HttpWorkerRequest)provider.GetService(typeof(HttpWorkerRequest));

byte []bs=wr.GetPreloadedEntityBody();

if(!wr.IsEntireEntityBodyIsPreloaded())

{

 int n=1024;

byte[] bs2=new byte[n];

while(wr.ReadEntityBody(bs2,n)>0)

{

 ....

}

}

问题二:如果需要可以在配置文件中限制上传文件的格式(以图片为例)

<?XML version="1.0" encoding="gb2312" ?>

<Application>

<FileUpLoad>

<Format>.jpg|.gif|.png|bmp

</FileUpLoad>

</Application>

然后编辑相应方法

1.多文件上传

效果图:


后台代码:
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;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }
    protected void bt_upload_Click(object sender, EventArgs e)
    {
      
            if ((FileUpload1.PostedFile.FileName == "" && FileUpload2.PostedFile.FileName == "")&&FileUpload3.PostedFile.FileName == "")
            {
                this.lb_info.Text = "请选择文件!";
            }
            else
            {
                HttpFileCollection myfiles = Request.Files;
                for (int i = 0; i < myfiles.Count; i++)
                {
                    HttpPostedFile mypost = myfiles[i];
                    try
                    {
                        if (mypost.ContentLength > 0)
                        {
                             string filepath = mypost.FileName;
                             string filename = filepath.Substring(filepath.LastIndexOf("\\") + 1);
                             string serverpath = Server.MapPath("images/") + filename;
                             mypost.SaveAs(serverpath);
                             this.lb_info.Text = "上传成功!";
                        }
                    }
                    catch (Exception error)
                    {
                        this.lb_info.Text = "上传发生错误!原因:" + error.ToString();
                    }

                }
             
            }
        }
     
    }

前台代码:
 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>多文件上传</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <table style="width: 343px">
            <tr>
                <td style="width: 100px">
                    多文件上传</td>
                <td style="width: 100px">
                </td>
            </tr>
            <tr>
                <td style="width: 100px">
                    <asp:FileUpload ID="FileUpload1" runat="server" Width="475px" />
                    </td>
                <td style="width: 100px">
                    </td>
            </tr>
            <tr>
                <td style="width: 100px">
                    <asp:FileUpload ID="FileUpload2" runat="server" Width="475px" /></td>
                <td style="width: 100px">
                </td>
            </tr>
            <tr>
                <td style="width: 100px">
                    <asp:FileUpload ID="FileUpload3" runat="server" Width="475px" /></td>
                <td style="width: 100px">
                </td>
            </tr>
            <tr>
                <td style="width: 100px">
                    <asp:Button ID="bt_upload" runat="server" OnClick="bt_upload_Click" Text="一起上传" />
                    <asp:Label ID="lb_info" runat="server" ForeColor="Red" Width="183px"></asp:Label></td>
                <td style="width: 100px">
                </td>
            </tr>
        </table>
  
    </div>
    </form>
</body>
</html>

2.客户端检测文件类型(使用js在前台页面实现)

<script   language="javascript">
 function Check_FileType()
{
var str=document.getElementById("FileUpload1").value;
 var pos = str.lastIndexOf(".");
 var lastname = str.substring(pos,str.length)
 if (lastname.toLowerCase()!=".jpg" && lastname.toLowerCase()!=".gif")
 {
     alert("您上传的文件类型为"+lastname+",图片必须为.jpg,.gif类型");
     return false;
 }
 else
 {
  return true;
 }
}
 </script> 

3.服务器端检测文件类型(以图片为例)

后台代码:
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;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }
    protected void bt_upload_Click(object sender, EventArgs e)
    {
        try
        {
            if (FileUpload1.PostedFile.FileName == "")
            {
                this.lb_info.Text = "请选择文件!";
            }
            else
            {
                string filepath = FileUpload1.PostedFile.FileName;
                if (IsAllowedExtension(FileUpload1) == true)
                {

                    string filename = filepath.Substring(filepath.LastIndexOf("\\") + 1);
                    string serverpath = Server.MapPath("images/") + filename;
                    FileUpload1.PostedFile.SaveAs(serverpath);
                    this.lb_info.Text = "上传成功!";
                }
                else
                {
                    this.lb_info.Text = "请上传图片";
                }
            }
        }
        catch (Exception error)
        {
            this.lb_info.Text = "上传发生错误!原因:" + error.ToString();
        }
    }

//判断图片类型
   public static bool IsAllowedExtension(FileUpload hifile)
    {
        string strOldFilePath = "", strExtension = "";
        string[] arrExtension =   { ".gif", ".jpg", ".jpeg", ".bmp", ".png" };
        if (hifile.PostedFile.FileName != string.Empty)
        {
            strOldFilePath = hifile.PostedFile.FileName;
            strExtension = strOldFilePath.Substring(strOldFilePath.LastIndexOf("."));
            for (int i = 0; i < arrExtension.Length; i++)
            {
                if (strExtension.Equals(arrExtension[i]))
                {
                    return true;
                }
            }
        }
        return false;
    }  

}
4.服务器端检测上传文件类型(可以检测真正文件名)

其实方法3并不好,因为用户可以把XXX.txt伪装为XXX.jpg。

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;

public partial class _Default : System.Web.UI.Page
{
   
    protected void Page_Load(object sender, EventArgs e)
    {

    }
    protected void bt_upload_Click(object sender, EventArgs e)
    {
        try
        {
            if (FileUpload1.PostedFile.FileName == "")
            {
                this.lb_info.Text = "请选择文件!";
            }
            else
            {
                string filepath = FileUpload1.PostedFile.FileName;
                if (IsAllowedExtension(FileUpload1) == true)
                {
                    string filename = filepath.Substring(filepath.LastIndexOf("\") + 1);
                    string serverpath = Server.MapPath("images/") + filename;
                    FileUpload1.PostedFile.SaveAs(serverpath);
                    this.lb_info.Text = "上传成功!";
                }
                else
                {
                    this.lb_info.Text = "请上传图片";
                }
            }
        }
        catch (Exception error)
        {
            this.lb_info.Text = "上传发生错误!原因:" + error.ToString();
        }
    }

//判断图片真正类型
    public static bool IsAllowedExtension(FileUpload hifile)
    {
        System.IO.FileStream fs = new System.IO.FileStream(hifile.PostedFile.FileName, System.IO.FileMode.Open, System.IO.FileAccess.Read);
        System.IO.BinaryReader r = new System.IO.BinaryReader(fs);
        string fileclass = "";
        byte buffer;
        try
        {
            buffer = r.ReadByte();
            fileclass = buffer.ToString();
            buffer = r.ReadByte();
            fileclass += buffer.ToString();

        }
        catch
        {
         
        }
        r.Close();
        fs.Close();
        if (fileclass == "255216" || fileclass == "7173")//说明255216是jpg;7173是gif;6677是BMP,13780是PNG;7790是exe,8297是rar
        {
            return true;
        }
        else
        {
            return false;
        }

    } 

}

5.上传文件的文件名唯一性处理(时间+SessionID)

说明:年月日时分秒+临时session+原文件名 如果大家怕还会重复可以加GUID

try
        {
            if (FileUpload1.PostedFile.FileName == "")
            {
                this.lb_info.Text = "请选择文件!";
            }
            else
            {
                string filepath = FileUpload1.PostedFile.FileName;
                string filename = filepath.Substring(filepath.LastIndexOf("\") + 1);
                string serverpath = Server.MapPath("images/") + System.DateTime.Now.ToString("yyy-MM-dd-hh-mm-ss") + Session.SessionID + filename;
                FileUpload1.PostedFile.SaveAs(serverpath);
                this.lb_info.Text = "上传成功!";
            }
        }
        catch (Exception error)
        {
            this.lb_info.Text = "上传发生错误!原因:" + error.ToString();
        }

注:GUID的方法:Guid myGuid=Guid.NewGuid();

6.上传图片成等比例缩略图

实现的方法类如下:

using System;
using System.IO;
using System.Drawing;
using System.Drawing.Imaging;

public class ImageThumbnail
{
    public Image ResourceImage;
    private int ImageWidth;
    private int ImageHeight;
    public string ErrorMessage;

    public ImageThumbnail(string ImageFileName)
    {
        ResourceImage = Image.FromFile(ImageFileName);
        ErrorMessage = "";
    }

    public bool ThumbnailCallback()
    {
        return false;
    }

 

    // 方法1,按大小
    public bool ReducedImage(int Width, int Height, string targetFilePath)
    {
        try
        {
            Image ReducedImage;
            Image.GetThumbnailImageAbort callb = new Image.GetThumbnailImageAbort(ThumbnailCallback);
            ReducedImage = ResourceImage.GetThumbnailImage(Width, Height, callb, IntPtr.Zero);
            ReducedImage.Save(@targetFilePath, ImageFormat.Jpeg);
            ReducedImage.Dispose();
            return true;
        }
        catch (Exception e)
        {
            ErrorMessage = e.Message;
            return false;
        }
    }


    // 方法2,按百分比  缩小60% Percent为0.6 targetFilePath为目标路径
    public bool ReducedImage(double Percent, string targetFilePath)
    {
        try
        {
            Image ReducedImage;
            Image.GetThumbnailImageAbort callb = new Image.GetThumbnailImageAbort(ThumbnailCallback);
            ImageWidth = Convert.ToInt32(ResourceImage.Width * Percent);
            ImageHeight = (ResourceImage.Height)*ImageWidth/ ResourceImage.Width;//等比例缩放
            ReducedImage = ResourceImage.GetThumbnailImage(ImageWidth, ImageHeight, callb, IntPtr.Zero);
            ReducedImage.Save(@targetFilePath, ImageFormat.Jpeg);
            ReducedImage.Dispose();
            return true;
        }
        catch (Exception e)
        {
            ErrorMessage = e.Message;
            return false;
        }
    }


}

后台的代码:

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;
public partial class _Default : System.Web.UI.Page
{

    protected void Page_Load(object sender, EventArgs e)
    {

    }
    protected void bt_upload_Click(object sender, EventArgs e)
    {
        try
        {
            if (FileUpload1.PostedFile.FileName == "")
            {
                this.lb_info.Text = "请选择文件!";
            }
            else
            {
                string filepath = FileUpload1.PostedFile.FileName;
                string filename = filepath.Substring(filepath.LastIndexOf("\\") + 1);
                string serverpath1 = Server.MapPath("images/") + filename;
                string serverpath2 = Server.MapPath("images/") + System.DateTime.Now.ToString("yyy-MM-dd-hh-mm-ss") + Session.SessionID + filename;
                FileUpload1.PostedFile.SaveAs(serverpath1);
                ImageThumbnail img = new ImageThumbnail(filepath);
                img.ReducedImage(0.4, serverpath2);//0.4表示缩小40%
                this.lb_info.Text = "上传成功!";
            }
        }
        catch (Exception error)
        {
            this.lb_info.Text = "上传发生错误!原因:" + error.ToString();
        }
    }


}

 

分享到:
评论

相关推荐

    Vuejs文件上传组件多文件上传

    本篇将详细介绍Vue.js中实现多文件上传的相关知识点,以及如何使用`vue-upload-component`这个开源组件来帮助我们实现这一功能。 首先,文件上传组件通常需要处理以下几个关键点: 1. **多文件选择**:用户可能...

    JSP同时选择多文件上传MultifileUploadDemo

    本篇文章将详细探讨如何使用JSP(JavaServer Pages)和Flash上传工具实现多文件上传的示例——"MultifileUploadDemo"。 首先,我们需要理解JSP的基本概念。JSP是Java平台上的动态网页技术,它允许开发者将静态内容...

    android文件上传控件

    本篇将详细讲解如何在Android中实现文件上传,并结合“亲测可用”的控件来探讨具体实践。 首先,我们需要了解Android中的文件操作。Android系统提供了一系列API,允许开发者读取、写入和管理本地文件。例如,你可以...

    go gin web框架文件上传,可以使用curl进行上传文件

    本篇文章将深入探讨如何在Gin中实现文件上传,并结合curl命令演示上传过程。 首先,我们需要在Gin路由中定义一个处理文件上传的处理器。Gin框架提供了`c.Request.FormFile`方法来获取上传的文件。下面是一个简单的...

    struts2文件上传下载源代码

    描述中的链接指向了CSDN博主johnjobs的一篇文章,这篇文章详细解释了如何在Struts2中实现文件上传。博主可能讨论了以下关键点: 1. **配置Struts2 Action**:在`struts.xml`配置文件中,你需要定义一个Action,该...

    jsp文件上传下载

    在【CSDN技术中心 jspSmartUpload上传下载全攻略(三、文件上传篇 ).htm】文件中,可能会详细讲解如何使用SmartUpload进行文件上传的步骤,包括配置HTML表单、在JSP中调用SmartUpload类、处理上传事件、保存文件到...

    Linux下文件上传

    本篇主要介绍Linux环境下的文件上传方式,以及与之相关的编程概念。 首先,Linux系统提供了多种文件上传的方式: 1. **FTP(File Transfer Protocol)**:FTP是最传统的文件传输协议,通过FTP客户端连接到远程...

    jqm文件上传,上传图片,jqm的表单操作,jqm的ajax的使用,jqm文件操作大全,文件操作demo

    本篇文章将详细探讨`jqm文件上传`、`jqm的表单操作`、`jqm的ajax使用`以及相关的`文件操作demo`,帮助你掌握如何在jqm环境中实现文件,尤其是图片的上传功能。 1. **jqm文件上传** jQuery Mobile提供了对HTML5表单...

    Java 上传文件到 SharePoint

    在实际开发中,你还需要考虑错误处理和异常捕获,确保在文件上传过程中遇到问题时能够妥善处理。此外,如果SharePoint的访问控制较为严格,可能需要使用ADAL(Active Directory Authentication Library)来获取访问...

    基于文件上传规范的支持多文件上传思路及实现

    本篇文章将详细探讨基于文件上传规范支持多文件上传的思路与实现方法。 首先,我们需要理解文件上传的基本流程。在HTTP协议中,文件上传通常依赖于`POST`请求,通过`multipart/form-data`编码类型来处理包含文件的...

    webwork 多文件上传

    本篇文章将深入探讨如何在WebWork框架下实现多文件上传,并结合实际案例进行解析。 首先,了解WebWork框架的基本原理是必要的。WebWork通过Action类处理HTTP请求,它将用户交互与业务逻辑分离,提供了一种优雅的...

    java上传文件到linux服务器,操作linux服务器上文件,下载linux服务器文件,删除linux服务器文件

    本篇文章将深入探讨如何使用Java来实现对Linux服务器的文件上传、操作、下载和删除,以及如何借助ganymed-ssh2库实现远程操作。 首先,让我们了解基础概念。Linux服务器是一种基于Linux操作系统并提供网络服务的...

    java 文件上传工具类 文件及文本数据

    本篇将详细讲解Java实现文件上传的相关知识点,主要关注如何处理文件及文本数据。 1. **Servlet API与Multipart请求** Java文件上传通常基于Servlet API,尤其是`HttpServletRequest`对象中的`getPart()`方法,它...

    Webapi 文件上传

    在本篇文章中,我们将深入探讨如何在WebAPI中实现文件上传,以及涉及的关键知识点。 首先,我们需要创建一个WebAPI控制器,该控制器将处理文件上传请求。控制器通常包含一个或多个公共方法,每个方法对应一个HTTP...

    多图片多文件上传

    "前台进行多图片、多文件上传"通常涉及到HTML5的File API,这个API允许JavaScript直接操作用户的文件。在HTML中,我们可以使用`&lt;input type="file" multiple&gt;`元素来创建一个可选择多个文件的控件。通过监听`change`...

    java操作Hadoop源码之HDFS Java API操作-上传文件

    本篇文章将详细探讨如何使用HDFS Java API来实现文件上传的功能。 首先,我们需要引入Hadoop相关的jar包。在描述中提到,附件包含了所有必要的jar包,这通常包括`hadoop-common`、`hadoop-hdfs`等核心组件的库文件...

    多个文件上传的功能

    本篇文章将详细讲解如何实现“多个文件上传的功能”,结合源码分析和工具的使用,帮助开发者更好地理解和实现这一实用功能。 首先,我们需要理解文件上传的基本原理。在HTML中,`&lt;input type="file"&gt;`元素用于创建...

    aspx 多文件上传

    在给定的资源中,`temp.html`是一个示例页面,它演示了如何调用CFUpdate组件进行文件上传操作。`update.swf`是Flash文件,可能用于在不支持HTML5多文件上传的旧版浏览器中提供一个回退选项。 在ASP.NET 2.0.50727...

    SpringBoot实现文件上传和下载.docx

    这篇文章将指导你如何使用Spring Boot来实现这两个操作。 首先,我们需要创建一个Spring Boot项目。在创建新项目时,需要添加必要的依赖。`spring-boot-starter-web`是Spring Boot Web项目的起步依赖,它包含了处理...

    ssm实现文件上传jar包

    本篇文章将详细探讨如何使用SSM来实现文件上传,并关注提供的两个jar包——`commons-io-2.4.jar`和`commons-fileupload-1.2.2.jar`的作用。 1. **文件上传基本流程** 文件上传通常涉及以下几个步骤: - 前端创建...

Global site tag (gtag.js) - Google Analytics