1 <%@ WebHandler Language="C#" Class="UpLoadFile" %>
2
3 using System;
4 using System.Collections;
5 using System.Collections.Generic;
6 using System.Drawing;
7 using System.Drawing.Drawing2D;
8 using System.Threading;
9 using System.Web;
10 using System.Web.Mvc;
11 using System.Web.Script.Serialization;
12 using System.IO;
13
14 /// <summary>
15 /// UpLoadHandler 的摘要说明
16 /// </summary>
17 public class UpLoadFile : IHttpHandler
18 {
19 //文件上传目录
20 private string uploadFolder = "/UserImages/";
21 //定义允许上传的文件扩展名
22 private String fileTypes = "jpg,gif,jpeg,png,doc,pdf,html,htm";
23 //最大文件大小 1MB=1000000byte
24 private int maxSize = 20000000;
25
26 public void ProcessRequest(HttpContext context)
27 {
28 UpLoadData data = new UpLoadData();
29 //context.Response.ContentType = "text/plain";
30
31 HttpFileCollection files = context.Request.Files;
32 try
33 {
34 if (files.Count <= 0 || files[0] == null)
35 {
36 ReturnError(context, "请选择文件。");
37 }
38
39 HttpPostedFile file = files[0];
40
41 if (file.InputStream == null || file.InputStream.Length > maxSize)
42 {
43 ReturnError(context, "上传文件大小超过限制。");
44 }
45
46 string fileExt = System.IO.Path.GetExtension(file.FileName).ToLower();
47 ArrayList fileTypeList = ArrayList.Adapter(fileTypes.Split(','));
48 if (String.IsNullOrEmpty(fileExt) || Array.IndexOf(fileTypes.Split(','), fileExt.Substring(1).ToLower()) == -1)
49 {
50 ReturnError(context, "上传文件扩展名是不允许的扩展名。");
51 }
52
53 //添加新文件
54 string fileName = GetDateTimeNO().ToString();
55 string folderName = context.Request.QueryString["folderName"];
56 string dateName = DateTime.Now.ToString("yyyy-MM-dd");
57 String dirPath = context.Server.MapPath("\\UserImages\\" + folderName + "\\" + dateName + "\\");
58 if (!Directory.Exists(dirPath))
59 {
60 Directory.CreateDirectory(dirPath);
61 }
62 string path = context.Server.MapPath(uploadFolder) + folderName + "\\" + dateName + "\\";
63 string fileFullName = fileName + fileExt;
64 string savePath = path + fileFullName;
65 file.SaveAs(savePath);
66
67 Image image = Image.FromFile(savePath);
68
69
70
71 switch (folderName)
72 {
73 case "Reports":
74 Image img = Thumbnail(image, 188, 140);
75
76 img.Save(path + "/S_" + fileFullName);
77
78 image.Dispose();
79 break;
80 case "Activity":
81 Image img2 = Thumbnail(image, 360, 270);
82
83 img2.Save(path + "/S_" + fileFullName);
84
85 image.Dispose();
86 break;
87
88 case "ActivityBrend":
89 Image img3 = Thumbnail(image, 280, 266);
90
91 img3.Save(path + "/S_" + fileFullName);
92
93 image.Dispose();
94 break;
95
96 case "ReleaseCars":
97 Image img4 = Thumbnail(image, 280, 266);
98
99 img4.Save(path + "/S_" + fileFullName);
100
101 image.Dispose();
102 break;
103
104 }
105 data.FileName = dateName + "/" + fileName + fileExt;
106 data.FileUrl = uploadFolder + folderName + "/" + dateName + "/" + fileName + fileExt;
107 }
108 catch (Exception e)
109 {
110 data.Error = e.Message;
111 }
112 context.Response.Write(new JavaScriptSerializer().Serialize(data));
113 context.Response.End();
114 }
115
116 private void DeleteFile(HttpContext context, string fileName)
117 {
118 String delFilePath = context.Server.MapPath(fileName);
119 if (File.Exists(delFilePath))
120 {
121 new FileInfo(delFilePath).Delete();
122 }
123 }
124
125 private void ReturnError(HttpContext context, string error)
126 {
127 UpLoadData data = new UpLoadData();
128 data.Error = error;
129 context.Response.AddHeader("Content-Type", "text/html; charset=UTF-8");
130 context.Response.Write(new JavaScriptSerializer().Serialize(data));
131 context.Response.End();
132 }
133
134 #region 按日期时间生成编号
135 /// <summary>
136 /// 按日期生成编号
137 /// </summary>
138 /// <param name="num">位数(默认18位)</param>
139 /// <returns>编号</returns>
140 public long GetDateTimeNO(int num = 18)
141 {
142 if (num > 20) num = 20;
143 string formatbase = "yyyyMMddhhmmssffffff";
144 Thread.Sleep(1);
145 return long.Parse((DateTime.Now.ToString(formatbase)).Substring(0, num));
146 }
147 /// <summary>
148 /// 按日期生成编号(后4位根据种子)
149 /// </summary>
150 /// <param name="rand">种子</param>
151 /// <param name="num">位数(默认18位)</param>
152 /// <returns>编号</returns>
153 public long GetDateTimeNO(int seed, int num = 18)
154 {
155 long result = 0;
156 if (num > 20) num = 20;
157 string formatbase = "yyyyMMddhhmmssffffff";
158 string seedstr = seed.ToString().PadLeft(4, '0');
159 result = long.Parse((DateTime.Now.ToString(formatbase)).Substring(0, num - 4) + seedstr);
160 return result;
161 }
162 #endregion
163
164
165
166
167 //缩小图片
168 public Image Thumbnail(Image image, int width, int height)
169 {
170 var newWidth = width;
171 var newHeight = image.Height * newWidth / image.Width;
172
173 if (newHeight < height)
174 {
175 // Resize with height instead
176 newWidth = image.Width * height / image.Height;
177 newHeight = height;
178 }
179
180 var tempImage = new Bitmap(newWidth, newHeight);
181
182 using (var graphic = Graphics.FromImage(tempImage))
183 {
184 //指定高质量的双三次插值法。执行预筛选以确保高质量的收缩。此模式可产生质量最高的转换图像。
185 graphic.InterpolationMode = InterpolationMode.High;
186
187 //指定高速度呈现
188 graphic.SmoothingMode = SmoothingMode.HighQuality;
189
190 // graphic.PixelOffsetMode = PixelOffsetMode.HighQuality;
191
192 //线性质量设置
193 graphic.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
194 graphic.DrawImage(image, 0, 0, newWidth, newHeight);
195 }
196
197 var x = (newWidth - width) / 2;
198 var y = 0;
199 var thumbnail = tempImage.Clone(new Rectangle(x, y, width, height), tempImage.PixelFormat);
200
201 return thumbnail;
202 }
203
204 public bool IsReusable
205 {
206 get
207 {
208 return false;
209 }
210 }
211 }
212
213 public class UpLoadData
214 {
215 /// <summary>
216 /// 错误信息
217 /// </summary>
218 public string Error { set; get; }
219 /// <summary>
220 /// 文件名称
221 /// </summary>
222 public string FileName { set; get; }
223 /// <summary>
224 /// 文件路径
225 /// </summary>
226 public string FileUrl { set; get; }
227
228 public UpLoadData()
229 {
230 this.Error = string.Empty;
231 this.FileName = string.Empty;
232 this.FileUrl = string.Empty;
233 }
234 }

上传文件的C#代码的更多相关文章

  1. C# FTP上传文件至服务器代码

    C# FTP上传文件至服务器代码 /// <summary> /// 上传文件 /// </summary> /// <param name="fileinfo ...

  2. Java上传文件FTP服务器代码

    1. 在实际的应用重,通常是通过程序来进行文件的上传. 2. 实现java上传文件到ftp服务器中 新建maven项目 添加依赖 <dependency> <groupId>c ...

  3. FastDFS的配置、部署与API使用解读(2)以字节方式上传文件的客户端代码(转)

    本文来自 诗商·柳惊鸿 Poechant CSDN博客,转载请注明源地址:FastDFS的配置.部署与API使用解读(2)上传文件到FastDFS分布式文件系统的客户端代码 在阅读本文之前,请您先通过 ...

  4. vue.js异步上传文件前后端代码

    上传文件前端代码如下: <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type&q ...

  5. nginx 服务器在上传文件出现413代码的解决方法

    打开nginx主配置文件nginx.conf 找到http{}段,添加client_max_body_size 20m;

  6. FastDFS的配置、部署与API使用解读(3)以流的方式上传文件的客户端代码(转)

    调用的API为: String[] upload_file( String group_name,//组名,不指定则可设为null long file_size,//文件大小,必须制定 UploadC ...

  7. Ajax方式上传文件

    用到两个对象 第一个对象:FormData 第二个对象:XMLHttpRequest 目前新版的Firefox 与 Chrome 等支持HTML5的浏览器完美的支持这两个对象,但IE9尚未支持 For ...

  8. MVC上传文件

    ASP.NET MVC上传文件是必段撑握的知识.加强训练才是.以前Insus.NET曾使用第三方MyAjaxForm.js :http://www.cnblogs.com/insus/p/378548 ...

  9. 图片上传和显示——上传图片——上传文件)==ZJ

    http://www.cnblogs.com/yc-755909659/archive/2013/04/17/3026409.html aspx上传 http://www.cnblogs.com/mq ...

随机推荐

  1. abc -- 牛客

    题目描述 设a.b.c均是0到9之间的数字,abc.bcc是两个三位数,且有:abc+bcc=532.求满足条件的所有a.b.c的值. 输入描述: 题目没有任何输入. 输出描述: 请输出所有满足题目条 ...

  2. css实现左边高度自适应右边高度

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  3. Python 学习笔记(6)— 字符串格式化

    字符串格式化处理 远古写法 以前通常使用运算符号 % ,%s 插入的值 String 类型,%.3f 指插入的值为包含 3 位小数的浮点数: format1 = "%s, %s!" ...

  4. volatile关键字的详解-并发编程的体现

    xl_echo编辑整理,欢迎转载,转载请声明文章来源.欢迎添加echo微信(微信号:t2421499075)交流学习. 百战不败,依不自称常胜,百败不颓,依能奋力前行.--这才是真正的堪称强大!! 参 ...

  5. DFS-深度优先算法解决迷宫问题

    /*main.cpp*/#define _CRT_SECURE_NO_WARNINGS #include<iostream> using namespace std; int sr, sc ...

  6. 种族并查集模板题分析 -----P2024 [NOI2001]食物链

    本文参考了:洛谷p2024题解 题目描述 动物王国中有三类动物 A,B,C,这三类动物的食物链构成了有趣的环形.A 吃 B,B 吃 C,C 吃 A. 现有 N 个动物,以 1 - N 编号.每个动物都 ...

  7. error LNK2001: unresolved external symbol "__declspec(dllimport)

    作为C++的小白,出现这个错误,是最头痛的.针对这种问题,我搜了网上的相关答案,很多都是在教Project ---> Settings中改动相关设置.我改了之后,问题依旧没有解决.后面查了这种问 ...

  8. js-DOM中基础选择器的整理

    DOM中基础选择器的整理 注意:DOM中选择器返回是数组类型的都是伪数组,只能拥有数组的索引以及length,数组的其他方法是不可以使用的! 一:DOM中的选择器 1.getElementById(i ...

  9. Redis学习总结(九)-- Redis常用技巧

    这里会记录下Redis 常用的小技巧 全局使用 redis-cli 等命令 在之前我们都在做 Redis 命令目录下通过 ./redis-cli这种形式访问,如果使用 redis-cli 的话就会报命 ...

  10. 信道估计系列之LS

    在无线通信系统中,系统的性能主要受到无线信道的制约.基站和接收机之间的传播路径复杂多变,从简单的视距传输到受障碍物反射.折射.散射影响的传播.在无线传输环境中,接收信号会存在多径时延,时间选择性衰落和 ...