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文件上传类,可以在配置文件中限制文件的数量、大小、目录和格式等等,在此分享给大家,希望能给我好的建议
自己写的一个php文件上传类,实现文件的上传很方便,支持单文件和多文件上传。
本人一个项目中写的java基于commons文件上传工具类
非常不错的文件上传类,欢迎各位大侠批评指正
非常简单的php表单文件上传类 里面注释很清楚了。如果有发现错误之处,请务必指出。
一个是从一个数组中找出另一个数组的位置,类似于 String 类中的 indexOf 的功能,另一个是从一个数组中提取出另一个数组, 类似于 String 类中的 substring 的功能,为此我们可以专门写两个方法,实现这种功能。...
阿里上传文件工具,oss,各种jar包,自己写的,可以上传文件,很齐全,可以直接用,还有demo等,demo个大家借鉴
高手写的一个php文件上传类,可以检查真实扩展名,不过比较复杂,单是class.upload.php一个文件就有252KB,4999行,没错是只差一行不到5000行,功能可想而知,里面有测试文件index.php可以照着里面来做,版权属于原...
自己写的一个C#工具类,功能很简单,但是很实用,觉得有用就下吧。 主要的方法有:更简单的截取字符串方法, 格式化布尔值返回checkbox或指定的字符串, 格式化日期并以固定格式返回, 传递recordCount和pageSize...
JSP上传文件(有进度条)可上传大文件 ...为了方便上传文件,本人写了一个传输文件类。 附有一个显示进度条的例子和源码。 作者:Fly QQ:280789588 JAVA群:27339232(地下第19层JAVA工作室) 更多源码,请关注JAVA群
struts2 文件上传,也可以多文件上传 里面分开写了两个类,单文件上传类和多文件上传类 适合初学者学习
fileupload上传类,自己写的,简单易懂
自己用servlet写的文件上传及下载功能带进度条 主要用到两个jar:commons-fileupload-1.2.2.jar和commons-io-2.0.1.jar 内容介绍: com.fm.FileManagerService:一个servlet用来实现主要的文件上传下载逻辑的 ...
添加Web依赖,创建一个Controller类。 添加处理文件上传的POST请求方法,使用MultipartFile接收上传文件。 验证文件,保存到服务器文件系统。 返回响应给客户端。 文件下载: 创建Controller类,添加处理文件下载的...
一个 自己 写的 jar 包,含有 Java 调用 Liunx 的静态类;文件的创建,读取,上传的静态类,和筛选目录下文件的静态类,包括源代码。
Java 流相关的类都封装在 java.io 包中,而且每个数据流都是一个对象。所有输入流类都是 InputStream 抽象类(字节输入流)以及 Reader 抽象类(字符输入流)的子类。其中 InputStream 类是字节输入流的抽象类,是...
一直以来,由于FileSystemObject的局限,所以ASP最大的难题就是文件上传,...就写了这个类,给大家一个方便,整个类放在一个文件中: upload_5xsoft.inc 在 Example 目录下还有一个完整的多文件上传示例程序,可以直接使用。
一个简单的java文件上传实例,简单好用。亲自测试通过!
这里是自己手写的,Util工具中的适合Excel2007,工具中会提到另外博客,博客里的技术适合所有版本的Excel。读者自己选择技术
本上传类为自己写的类,不敢夸口说多完美,但能实现基本的功能.包括提取表单数据、上传到不同文件夹、保存到数据库(上传和保存表单可同时进行)、限制上传扩展名、限制上传大小、选择文件保存类型(原文件名和时间随机...