`
java-mans
  • 浏览: 11415817 次
文章分类
社区版块
存档分类
最新评论

C# ASP.NET 文件上传下载 下载时图片不自动打开

 
阅读更多

using System;
using System.IO;
using System.Collections;
using System.Collections.Generic;
using System.Text;
using System.Net;
using System.Web;
using System.Web.UI.HtmlControls;
using Care365.Model;

namespace Care365.Tools
{
public abstract class FileHelper
{
static Hashtable _allExtension;

public static Hashtable AllExtension
{
get
{
if (_allExtension != null)
{
return _allExtension;
}
else
{

_allExtension = FillExtension();

return _allExtension;
}
}
}
/// <summary>
/// 配置允许用户上传的文件集合
/// </summary>
/// <returns></returns>
private static Hashtable FillExtension()
{
Hashtable table = new Hashtable();
table.Add(".gif", ".gif");
table.Add(".jpg", ".jpg");
table.Add(".jpeg", ".jpeg");
table.Add(".bmp", ".bmp");
table.Add(".png", ".png");

return table;
}
/// <summary>
/// 上传文件
/// </summary>
/// <param name="relativePath"></param>
/// <returns></returns>
public static List<UploadFile> UploadFile(string relativePath)
{
if (relativePath.LastIndexOf('//') == relativePath.Length)
{
relativePath += "//";
}

//确认目录存在
if (!Directory.Exists(HttpContext.Current.Server.MapPath(relativePath))) Directory.CreateDirectory(HttpContext.Current.Server.MapPath(relativePath));

HttpFileCollection collection = HttpContext.Current.Request.Files;
List<UploadFile> list = new List<UploadFile>();
string fileName;
string clientName;
string servername;
int length = collection.Count;
for (int i = 0; i < length; i++)
{
HttpPostedFile item = collection[i];
fileName = item.FileName;
if (fileName != null && fileName.Trim().Length > 0)
{
string strExtension = fileName.Substring(fileName.LastIndexOf('.'));
//校验上传文件的格式
if (!ExistUploadType(strExtension))
{
UploadFile uf = new UploadFile();
uf.Upload = false;
uf.Remark = "此格式的文件不允许上传!";
list.Add(uf);
continue;
}
//校验文件大小
if (!IsAllowedLength(item.ContentLength))
{
UploadFile uf = new UploadFile();
uf.Upload = false;
uf.Remark = "文件长度过大!";
list.Add(uf);
continue;
}

clientName = fileName.Substring(fileName.LastIndexOf('//') + 1);

servername = string.Format("{0}{1}{2}", relativePath, Code.GetMd5HashCode(Code.GetGUID()), strExtension);

try
{
item.SaveAs(HttpContext.Current.Server.MapPath(servername));
}
catch (Exception e)
{
UploadFile uf = new UploadFile();
uf.Upload = false;
uf.Remark = e.Message;
list.Add(uf);
continue;
}

UploadFile upf = new UploadFile();
upf.Upload = true;
upf.ServerName = servername;
upf.ClientName = clientName;
upf.Remark = "上传成功!";

list.Add(upf);
}
}

return list;
}
/// <summary>
///
/// </summary>
/// <param name="file"></param>
/// <param name="relativePath">相对路径</param>
/// <returns></returns>
public static UploadFile UploadFile(HttpPostedFile file, string relativePath)
{
if (relativePath.LastIndexOf('//') == relativePath.Length)
{
relativePath += "//";
}

if (!Directory.Exists(relativePath)) Directory.CreateDirectory(relativePath);

string fileName;
string clientName;
string servername;

fileName = file.FileName;
if (fileName != null && fileName.Trim().Length > 0)
{
string strExtension = fileName.Substring(fileName.LastIndexOf('.'));
//校验上传文件的格式
if (!ExistUploadType(strExtension))
{
UploadFile uf = new UploadFile();
uf.Upload = false;
uf.Remark = "此格式的文件不允许上传!";
return uf;
}
//校验文件大小
if (!IsAllowedLength(file.ContentLength))
{
UploadFile uf = new UploadFile();
uf.Upload = false;
uf.Remark = "文件长度过大!";
return uf;
}

clientName = fileName.Substring(fileName.LastIndexOf('//') + 1);

servername = string.Format("{0}{1}{2}", relativePath, Code.GetMd5HashCode(Code.GetGUID()), strExtension);
try
{
file.SaveAs(HttpContext.Current.Server.MapPath(servername));
}
catch (Exception e)
{
UploadFile uf = new UploadFile();
uf.Upload = false;
uf.Remark = e.Message;
return uf;
}

UploadFile upf = new UploadFile();
upf.Upload = true;
upf.ServerName = servername;
upf.ClientName = clientName;
upf.Remark = "上传成功!";

return upf;
}

return null;
}
/// <summary>
/// 文件下载
/// </summary>
/// <param name="Response"></param>
/// <param name="filePath"></param>
public static void DownloadFile(System.Web.HttpResponse Response, string filePath)
{
filePath = filePath.Replace("/", "//");
string fileName = filePath.Substring(filePath.LastIndexOf('//') + 1);

System.IO.FileInfo file = new System.IO.FileInfo(filePath);

if (file.Exists)
{
long dataLengthToRead = file.Length; // 获取下载的文件总大小

Response.AddHeader("Content-Length", dataLengthToRead.ToString());
Response.AddHeader("Content-Disposition", "attachment;filename=" + System.Web.HttpUtility.UrlEncode(fileName));

switch (file.Extension)
{
case "gif":
Response.ContentType = "image/gif";
break;
case "jpg":
Response.ContentType = "image/jpeg";
break;
case "bmp":
Response.ContentType = "image/bmp";
break;
case "zip":
Response.ContentType = "application/octet-stream";
break;
case "rar":
Response.ContentType = "application/octet-stream";
break;
case "txt":
Response.ContentType = "text/plain";
break;
case "wps":
Response.ContentType = "application/octet-stream";
break;
case "doc":
Response.ContentType = "application/ms-word";
break;
case "xls":
Response.ContentType = "application/ms-excel";
break;
case "swf":
Response.ContentType = "application/x-shockwave-flash";
break;
case "ppt":
Response.ContentType = "application/ms-powerpoint";
break;
case "fla":
Response.ContentType = "application/octet-stream";
break;
case "mp3":
Response.ContentType = "audio/mp3";
break;
}
Response.TransmitFile(filePath);
Response.End();
}
}
/// <summary>
/// 文件下载
/// </summary>
/// <param name="Response">发送对象</param>
/// <param name="filePath">客户端下载文件地址</param>
/// <param name="clientName">指定客户端下载文件名</param>
public static void DownloadFile(System.Web.HttpResponse Response, string filePath, string clientName)
{
filePath = filePath.Replace("/", "//");
string fileName = filePath.Substring(filePath.LastIndexOf('//') + 1);

System.IO.FileInfo file = new System.IO.FileInfo(filePath);

if (file.Exists)
{
long dataLengthToRead = file.Length; // 获取下载的文件总大小
//文件名超过16个字符就会自动截取,防止出现乱码
string temp = clientName.Substring(0, clientName.LastIndexOf('.'));
string ex = clientName.Substring(clientName.LastIndexOf('.'));
if (temp.Length > 16)
{
temp = temp.Substring(0, 16) + ex;
}
else
{
temp = clientName;
}
Response.AddHeader("Content-Length", dataLengthToRead.ToString());
Response.AddHeader("Content-Disposition", "attachment;filename=/"" + System.Web.HttpUtility.UrlEncode(temp, Encoding.UTF8) + "/"");
switch (file.Extension)
{
case "gif":
Response.ContentType = "image/gif";
break;
case "jpg":
Response.ContentType = "image/jpeg";
break;
case "bmp":
Response.ContentType = "image/bmp";
break;
case "zip":
Response.ContentType = "application/octet-stream";
break;
case "rar":
Response.ContentType = "application/octet-stream";
break;
case "txt":
Response.ContentType = "text/plain";
break;
case "wps":
Response.ContentType = "application/octet-stream";
break;
case "doc":
Response.ContentType = "application/ms-word";
break;
case "xls":
Response.ContentType = "application/ms-excel";
break;
case "swf":
Response.ContentType = "application/x-shockwave-flash";
break;
case "ppt":
Response.ContentType = "application/ms-powerpoint";
break;
case "fla":
Response.ContentType = "application/octet-stream";
break;
case "mp3":
Response.ContentType = "audio/mp3";
break;
}
Response.TransmitFile(filePath);
Response.End();
}
}
/// <summary>
/// 校验上传文件是否被允许上传
/// </summary>
/// <param name="extension"></param>
/// <returns></returns>
private static bool ExistUploadType(string extension)
{
if (extension.IndexOf('.') < 0) extension.Insert(0, ".");

return AllExtension.Contains(extension);
}
/// <summary>
/// 如果上传文件的大小超过最大值,返回flase,否则返回true.
/// </summary>
/// <param name="length"></param>
/// <returns></returns>
public static bool IsAllowedLength(int length)
{
//允许上传文件大小的最大值,可以保存在xml文件中,单位为MB
int i = 4;
//如果上传文件的大小超过最大值,返回flase,否则返回true.
if (length > i * 1048576)
{
return false;
}
return true;
}
/// <summary>
///删除文件,当文件不存在的时候不会产生错误
/// </summary>
/// <param name="path">相对路径</param>
public static void DeleteFile(string path)
{
File.Delete(HttpContext.Current.Server.MapPath(path));
}
}
}

//实体类

using System;
using System.Collections.Generic;
using System.Text;

namespace Care365.Model
{
public class UploadFile
{
string _serverName;

public string ServerName
{
get { return _serverName; }
set { _serverName = value; }
}
string _clientName;

public string ClientName
{
get { return _clientName; }
set { _clientName = value; }
}
bool _upload;

public bool Upload
{
get { return _upload; }
set { _upload = value; }
}

string _remark;

public string Remark
{
get { return _remark; }
set { _remark = value; }
}
}
}

分享到:
评论

相关推荐

    asp.net知识库

    HttpModule 实现 ASP.Net (*.aspx) 中文简繁体的自动转换,不用修改原有的任何代码,直接部署即可! 服务器自定义开发二之客户端脚本回发 Web开发: 使用URL重写WEB主题切换 如何在Asp.Net1.1中实现页面模板(所谓的...

    课题设计基于C#的学生管理信息系统,ASP.NET+SQL Server+Layui 基于C#的学生管理信息系统.zip

    1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、...下载后请首先打开README.md文件(如有),仅供学习参考。

    Web图片上传控件开发文档-JSP版

    1. 基于标准HTTP协议,支持ASP,ASP.NET(C#),ASP.NET(VB),JSP,PHP等服务端语言。 2. 支持BMP,JPG,GIF,PNG图片格式。 3. 支持自动生成缩略图。 4. 支持图片格式批量转换功能。 5. 支持文件批量上传。 6. 支持文件拖拽...

    一个基于 ASP.NET MVC 的简单图书购物商城(VS 2015 + C# 6.0).zip

    1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、...下载后请首先打开README.md文件(如有),仅供学习参考。

    php批量上传图片代码

    现在新颖网络图片上传控件在上传图片时平均每张图片帮助用户节省了50%的时间。 相信新颖网络图片上传控件能够为您的应用带来更好的用户体验。 产品特点如下: 1. 基于标准HTTP协议。 2. 支持BMP,JPG,GIF,PNG图片...

    Asp.Net Mvc基于Fleck开发的多人网页版即时聊天室.zip

    1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、...下载后请首先打开README.md文件(如有),仅供学习参考。

    web网页批量上传图片代码

    现在新颖网络图片上传控件在上传图片时平均每张图片帮助用户节省了50%的时间。 相信新颖网络图片上传控件能够为您的应用带来更好的用户体验。 产品特点如下: 1. 基于标准HTTP协议。 2. 支持BMP,JPG,GIF,PNG图片...

    XfokSite.Net网站内容管理系统 v1.2.1 免费版

    5.添加内容时的上传文件增加图片预览功能 6.增加填充至缩略图框(但不生成缩略图) 7.修正在不使用ASPX运行方式时的搜索分类连接错误的BUG 8.修正程序再非根目录下,上一篇下一篇连接错误的BUG 9....

    NTKO附件管理控件

    NTKO附件管理控件(多文件上传下载在线编辑扫描控件)是拥有完全独立知识产权的多附件上传控件.使用NTKO附件管理控件[多文件上传控件],能够在浏览器中启动原始文件对应的应用程序,对图像文件,OFFICE文件,文本文件,...

    C#网站制作经典实操

    7.1 图片文件上传操作的前期工作 103 7.1.1新建上传文件数据库表 103 7.1.2建立上传文件的文件夹,存放文件夹 105 7.1.3文件上传操作页功能 105 7.2 图片上传页jpgUp.aspx制作 105 7.2.1 jpgUp.aspx功能设计要求 105...

    C#编程经验技巧宝典

    111 &lt;br&gt;0184 如何在ASP.NET中获取文件的扩展名 111 &lt;br&gt;0185 如何在ASP.NET中用URL在页面之间传值 112 &lt;br&gt;0186 如何使用IsPostBack实现ASP.NET页面加载 112 &lt;br&gt;0187 如何利用输出缓存技术缓存...

    C#源码大集合 02(共3卷)

    之前分为四个包,后两个包上传不了,对于已经下载的朋友表示赚意,现在重新再发一次(改为3卷) ├─C#源码第一部分 │ ├─第1章 控件操作 │ │ ├─实例1 如何使用错误提醒控件 │ │ ├─实例10 如何使用列表...

Global site tag (gtag.js) - Google Analytics