上传文件的C#代码

  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 }
时间: 2024-10-16 17:03:24

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

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

C# FTP上传文件至服务器代码 /// <summary> /// 上传文件 /// </summary> /// <param name="fileinfo">需要上传的文件</param> /// <param name="targetDir">目标路径</param> /// <param name="hostname">ftp地址</param&g

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

1.下载FastDFS的API FastDFS提供Java和PHP等语言的客户端API.可以到FastDFS在Google Code的项目主页 http://code.google.com/p/fastdfs/downloads/list 下载.本文以Java API为例. 2.调用API的上传接口 通过Servlet得到InputStream.文件名称和文件长度,然后通过调用FastDFS提供的Java API把文件上传到FastDFS服务器.下段代码中的getFileBuffer可参考本博客

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

调用的API为: String[] upload_file( String group_name,//组名,不指定则可设为null long file_size,//文件大小,必须制定 UploadCallback callback,//回调 String file_ext_name, NameValuePair[] meta_list ) 1 /** 2 * Upload File to DFS, directly transferring java.io.InputStream to jav

【SpringMVC】使用SpringMVC进行上传文件!

写在前面: 之前在上传文件的时候,使用的是commons-file-upload这个插件,非常方便,能控制每个文件的大小,总共大小,缓存,以及支持多个文件的同时上传,但是写一次上传文件的后台代码量太大了,如图 如果有多个地方都要上传文件,每一次都要复制,粘贴一遍又一遍,实在是太麻烦,后台想到能不能把相同的代码都封装到一个方法,然后需要使用的时候再稍微改一下就行了,在封装的过程中,发现原来SpringMVC有自带的上传文件组件,遂用了一下,感觉多然很方面! 下面详细的说一下使用步骤! 1,准备好相

Android上传文件至服务器(转)

本实例实现每隔5秒上传一次,通过服务器端获取手机上传过来的文件信息并做相应处理:采用Android+Struts2技术. 一.Android端实现文件上传 1).新建一个Android项目命名为androidUpload,目录结构如下: 2).新建FormFile类,用来封装文件信息 package com.ljq.utils; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundExce

Ajax方式上传文件

用到两个对象 第一个对象:FormData 第二个对象:XMLHttpRequest 目前新版的Firefox 与 Chrome 等支持HTML5的浏览器完美的支持这两个对象,但IE9尚未支持 FormData 对象,还在用IE6 ? 只能仰天长叹.... 有了这两个对象,我们可以真正的实现Ajax方式上传文件. 示例代码: <!DOCTYPE html> <html> <head> <title>Html5 Ajax 上传文件</title>

js上传文件

一.原始的XMLHttpRequestjs上传文件过程(参考地址:http://blog.sina.com.cn/s/blog_5d64f7e3010127ns.html) 用到两个对象 第一个对象:FormData 第二个对象:XMLHttpRequest 目前新版的Firefox 与 Chrome 等支持HTML5的浏览器完美的支持这两个对象,但IE9尚未支持 FormData 对象,还在用IE6 ? 只能仰天长叹.... 有了这两个对象,我们可以真正的实现Ajax方式上传文件. 示例代码:

Android端通过HttpURLConnection上传文件到server

一:实现原理 近期在做Androidclient的应用开发,涉及到要把图片上传到后台server中.自己选择了做Spring3 MVC HTTP API作为后台上传接口,androidclient我选择用HttpURLConnection来通过form提交文件数据实现上传功能,本来想网上搜搜拷贝一下改改代码就好啦,发现根本没有现成的样例,多数的样例都是基于HttpClient的或者是基于Base64编码以后作为字符串来传输图像数据,于是我不得不自己动手.參考了网上一些资料,终于实现基于HttpU

使用XWAF框架(2)——上传文件

XWAF提供了上传文件的HttpFileUploader工具类,具备强大的多文件上传.文件类型过滤.文件大小限制.存储目录设置.文件名称更改等功能,简化了Web应用开发的编程工作. 它能同时解析表单参数和文件域,不仅能够将文件保存到服务器上,还能同时提取表单参数的值. 如果要在保存上传文件之前提取参数值,就需要先调用"parseRequest()"方法,并使用该方法返回的对象替换request变量,然后再使用getParameter(name) 方法提取参数值. 参考代码如下: pri