`

自己写的一个文件上传的类

    博客分类:
  • C#
阅读更多
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.IO;
using System.Runtime.Remoting.Messaging;
namespace uploadfiles
{
 /// <summary>
 /// ClassUpload 的摘要说明。
 /// </summary>
 /*
  wenconfig中添加元素
  <httpRuntime maxRequestLength="1048576" executionTimeout="3600" />
  <!-- maxRequestLength:指示 ASP.NET 
  支持的HTTP方式上载的最大字节数。该限制可用于防止因用户将大量文件传递到该服务器而导致的拒绝服务攻击。指定的大小以 KB 为单位。默认值为 4096 KB 
  (4 MB)。executionTimeout:指示在被 ASP.NET 自动关闭前,允许执行请求的最大秒数。在当文件超出指定的大小时,如果浏览器中会产生 
  DNS 错误或者出现服务不可得到的情况,也请修改以上的配置,把配置数加大。 
      -->
  */
 /*
  Machine.config中添加元素
  <processModel 
         enable="true"
         timeout="15" 
         idleTimeout="25"
         shutdownTimeout="5"
         requestLimit="1000"
         requestQueueLimit="500"
         responseDeadlockInterval="00:03:00"              
         responseRestartDeadlockInterval="Infinite"
         memoryLimit="80"
         webGarden="true"
         maxWorkerThreads="25"
         maxIoThreads="25"/>
   <!-- 
  上载大文件时,还可能会收到以下错误信息:</P><XMP> aspnet_wp.exe (PID: 1520) 被回收,因为内存消耗超过了 460 MB(可用 RAM 的百分之 60)。
 </XMP>
 <P>如果遇到此错误信息,请增加应用程序的 Machine.config 文件的 <processModel>元素中 memoryLimit 属性的值。 
    -->
  */
 public class ClassUpload
 {
  public ClassUpload()
  {
   //
   // TODO: 在此处添加构造函数逻辑
   //
  }
  private System.IO.MemoryStream m;
  private System.IO.Stream fs;
        private string _filename;        //上传文件扩展名
        private int _maxlength;          //获取上传文件最大长度(字节)
  private string _FilePath;        //获取本地上传文件路径
  private int    _length = 0;      //保存文件长度(字节)
  private string _savepath;        //获取保存路径
  private string _savename;        //重命名后的上传文件
  private string _fullpath;        //上传文件的完整目录
        
  /// <summary>
  /// 上传文件成功后文件的长度(字节)
  /// </summary>
  public int length
  {
   get
   {
    return _length;
   }
  }
        /// <summary>
        /// 获取保存路径
        /// </summary>
  public string savepath
  {
   get
   {
    return _savepath;

   }
  }
        /// <summary>
        /// 获取重命名后的上传文件
        /// </summary>
  public string savename
  {
   get
   {
    return _savename;

   }
  }
  /// <summary>
  /// 获取上传后文件的完整目录
  /// </summary>
  public string fullpath
  {
   get
   {
    return _fullpath;
   }
  }
     /// <summary>
     /// 获取本地上传文件路径
     /// </summary>
  public string filepath
  {
   get
   {
    return _FilePath;

   }
  }
  
  /// <summary>
  /// 上传文件方法
  /// </summary>
  /// <param name="MyFile">System.Web.UI.HtmlControls.HtmlInputFile</param>
  /// <param name="savepath">设置保存上传文件的路径</param>
  /// <param name="maxlength">设置上传文件的最大长度</param>
  public string upload(System.Web.UI.HtmlControls.HtmlInputFile MyFile,string savepath,int maxlength)
  {
   this._savepath = savepath;
   this._maxlength = maxlength;
   //得到上载文件信息和文件流
   if(MyFile.PostedFile != null)
   {
    System.Web.HttpFileCollection oFiles;
    oFiles = System.Web.HttpContext.Current.Request.Files;

    if(oFiles.Count < 1)
    {
     return "请选择文件!";
    }

    _FilePath = oFiles[0].FileName;
    if(_FilePath == "" || _FilePath == null)
    {
     return "请选择一个文件!";
    }
    _filename = "."+_FilePath.Substring(_FilePath.LastIndexOf(".")+1);
    //_contentlength = oFiles[0].ContentLength.ToString();

    //Response.Write(FileName+FilePath);
    if(oFiles[0].ContentLength>this._maxlength)
    {
     return "上传文件长度过大";
    }
    else
    {
     try
     {
      //处理上载的文件流信息。
      byte[] b = new byte[oFiles[0].ContentLength];
      //System.IO.Stream fs;
      fs = (System.IO.Stream)oFiles[0].InputStream;
      fs.Read(b, 0, oFiles[0].ContentLength);
      //调用处理内存流方法UploadFile
      return this.UploadFile(b,this._filename,this._savepath);
      //int value = Convert.ToInt32(asy.AsyncState);
      
     }
     catch(Exception ex)
     {
      //Response.Write(ex.Message);
      return ex.Message;
     }
     finally
     {
         fs.Close();
     }
    }
   }
   else
   {
    //Response.Write("请选择文件");
    return "请选择文件";
   }
  }

  private string UploadFile(byte[] fs,string FileName,string savepath)
  {
   try
   {
     //定义并实例化一个内存流,以存放提交上来的字节数组。
     m = new MemoryStream(fs);
        this._length = fs.Length;
        //System.Web.HttpContext.Current.Server.MapPath(".") + @"\\images\"
     //定义实际文件对象,保存上载的文件。
        this._fullpath = this._savepath+ names()+FileName;
     FileStream f = new FileStream(this._fullpath, FileMode.Create);
        this._savename = names()+FileName;
     //把内内存里的数据写入物理文件
     m.WriteTo(f);
     m.Close();
     f.Close();
     f = null;
     m = null;
    
    return "文件已经上传成功!";
   }
   catch(Exception ex)
   {
    return ex.Message;
   }
  }
  //生成 (年,月,日,时,分,秒)+随机数的文件名
  private string names()
  {   
   Random rm = new Random(System.Environment.TickCount);
   return System.DateTime.Now.ToString("yyyyMMddhhmmss")+rm.Next(1000,9999).ToString();
  }

 }
}

分享到:
评论

相关推荐

    php文件上传,自己写的文件上传类,附带一个demo,欢迎大牛们提出意见和建议

    这里提供的资源是一个自定义的PHP文件上传类,该类允许开发者更灵活地控制上传过程中的各种参数,比如文件数量、大小、存储目录以及允许的文件类型。让我们详细探讨一下这个主题。 1. **文件上传原理**: PHP文件...

    自己写的一个PHP文件上传类

    自己写的一个php文件上传类,实现文件的上传很方便,支持单文件和多文件上传。

    上传文件工具类

    `UploadState.java`可能定义了一个枚举类型,用于表示文件上传过程中的不同状态,例如“上传成功”、“文件过大”、“网络错误”等。枚举在Java中是一种强大的常量集合,可以方便地处理预定义的一组值。通过这样的...

    非常好的文件上传类

    非常不错的文件上传类,欢迎各位大侠批评指正

    php文件上传类(自己写的)

    非常简单的php表单文件上传类 里面注释很清楚了。如果有发现错误之处,请务必指出。

    JavaWeb中文件上传最强工具类

    这里我们关注的是一个自定义的Util工具类,它特别针对Excel2007格式进行了优化,同时也兼容其他版本的Excel处理。这个工具类结合了文件上传、JSON解析以及Form表单提交等技术,提供了强大的文件处理能力。 首先,让...

    ASP先锋无组件上传类.rar

    总结起来,ASP先锋无组件上传类是一个值得学习和研究的工具,特别是对于那些在ASP平台上构建Web应用,并需要处理用户文件上传功能的开发者。通过深入理解这个组件,开发者不仅可以提升自己的编程技能,还能更好地...

    一个jsp上传文件、下载文件的代码

    7. **响应处理**:Servlet处理完文件上传后,需要返回一个响应告知客户端操作结果。 文件下载则涉及到向客户端发送文件内容。以下是一些关键知识点: 1. **设置响应头**:为了正确地触发浏览器的下载行为,需要在...

    C#写的WCF文件上传示例

    **C# WCF 文件上传示例详解** C#(C Sharp)是微软开发的一...通过以上步骤,我们可以创建一个高效、可靠的C# WCF文件上传服务,特别是对于处理大文件的场景。这个示例不仅适合初学者学习,也适用于实际项目中的应用。

    文件上传下载需要的jar包 java文件上传下载

    1. **Apache Commons FileUpload**: 这是一个非常流行的Java库,用于处理HTTP请求中的多部分数据,特别适合处理文件上传。它提供了简单易用的API,可以解析HTTP请求中的文件内容,将文件保存到服务器端。 2. **...

    文件上传下载服务器

    文件上传下载服务器是一种重要的网络服务,它为用户提供了一个方便、高效的方式来交换文件,特别是对于教育机构,如学校,教师可以利用这种服务收发作业、试卷等教学材料。在这个场景下,教师无需通过邮件或者传统的...

    上传文件和阿里上传文件工具类.rar

    阿里上传文件工具,oss,各种jar包,自己写的,可以上传文件,很齐全,可以直接用,还有demo等,demo个大家借鉴

    springboot文件上传(支持单个和多个)

    接下来,创建一个控制器(Controller)来处理文件上传请求。Spring Boot中的`@RestController`注解表示这是一个RESTful的控制器,而`@PostMapping`用于定义接收POST请求的方法。`@RequestParam`注解用来从请求中获取...

    高手写的一个php文件上传类,可以检查真实扩展名

    高手写的一个php文件上传类,可以检查真实扩展名,不过比较复杂,单是class.upload.php一个文件就有252KB,4999行,没错是只差一行不到5000行,功能可想而知,里面有测试文件index.php可以照着里面来做,版权属于原...

    PHP实现的多文件上传类及用法示例

    本文介绍了一个PHP实现的多文件上传类,这个类封装了多文件上传的相关操作,简化了多文件上传的处理流程。 #### 文件上传的实现机制 文件上传通过HTML表单中的`&lt;input type="file"&gt;`元素来实现。当用户选择文件后,...

    多个文件上传

    2. **MultipartFile接口**:Spring框架提供了一个名为`MultipartFile`的接口,它简化了文件上传操作。如果你的项目中已经使用了Spring,可以利用`MultipartFile`来处理文件。如果没有,你需要手动解析多部分请求,这...

    php 文件上传类代码

    该PHP文件上传类 (`uploadFile`) 是为了简化文件上传过程而设计的,它提供了一些基本的验证和处理功能。下面是对这个类的详细说明: 1. **类变量**: - `$max_size`:设置允许上传的最大文件大小,默认为1MB...

    struts2文件上传jar

    `commons-fileupload.jar` 是这个库的实现,它包含了处理文件上传的基本类和接口。 3. **IO库**:为了读写文件,Struts2还需要Apache Commons IO库。`commons-io.jar` 提供了一系列方便的IO操作工具类,如文件读写...

    文件上传所需要的jar包

    `commons-io-1.4.jar` 是Apache Commons IO库的一个版本,它提供了一系列通用的I/O操作工具类。在文件上传场景中,Commons IO库常用于文件的读写、复制、删除、比较等操作。以下是一些重要功能: 1. **文件操作**: ...

    android 文件上传含进度条

    具体实现上,可以创建一个自定义的AsyncTask子类,内部实现上传逻辑,并在onProgressUpdate方法中更新进度条。例如: ```java class UploadTask extends AsyncTask, Integer, Boolean&gt; { private ProgressBar ...

Global site tag (gtag.js) - Google Analytics