项目中的图片上传类

  1     public class Images
2 {
3 ///<summary>
4 /// 添加图片
5 ///</summary>
6 ///<param name="Uid">用户ID</param>
7 ///<param name="form"></param>
8 ///<param name="files"></param>
9 ///<returns>返回成功上传的图片个数</returns>
10 public static IList<String> Add(int Uid, NameValueCollection form, HttpFileCollection files)
11 {
12 List<String> imgList = new List<String>();
13 string[] fz = form.GetValues("fuzhu");
14 for (int i = 0; i < files.Count; i++)
15 {
16 if (files[i].FileName.Length > 0)
17 {
18 string fuzhu = fz[i].Length >= 500 ? fz[i].Substring(0, 500) : fz[i];
19 HttpPostedFile postedfile = files[i];
20 SqlCommand cmd = new SqlCommand("p_img_upload", CMSDB.oDB.GetConnection());
21 try
22 {
23 cmd.CommandType = CommandType.StoredProcedure;
24 //要检查扩展名,只允许gif,jpg,png,还要转换成小写
25 String extName = Path.GetExtension(postedfile.FileName).Substring(1).ToLower();
26 //获取上传文件的width和height属性
27 Int32 Height = Image.FromFile(postedfile.FileName).Height;
28 Int32 Width = Image.FromFile(postedfile.FileName).Width;
29 if (isExtName(extName))
30 {
31 //保存信息入库
32 cmd.Parameters.Add(new SqlParameter("@uid", SqlDbType.Int)).Value = Uid;
33 cmd.Parameters.Add(new SqlParameter("@fuzhu", SqlDbType.NVarChar, 500)).Value = fuzhu;
34 cmd.Parameters.Add(new SqlParameter("@extName", SqlDbType.Char, 4)).Value = extName;
35 cmd.Parameters.Add(new SqlParameter("@width", SqlDbType.Int)).Value = Width;
36 cmd.Parameters.Add(new SqlParameter("@height", SqlDbType.Int)).Value = Height;
37
38 cmd.Parameters.Add(new SqlParameter("@id", SqlDbType.Int)).Direction = ParameterDirection.Output;
39 cmd.Parameters.Add(new SqlParameter("@rq", SqlDbType.SmallDateTime)).Direction = ParameterDirection.Output;
40 cmd.Parameters.Add(new SqlParameter("@bz", SqlDbType.Int)).Direction = ParameterDirection.Output;
41 if (cmd.ExecuteNonQuery() > 0)
42 {
43 string realpath = GetRealPath((int)(cmd.Parameters["@id"].Value), (DateTime)(cmd.Parameters["@rq"].Value), extName
44 , (int)(cmd.Parameters["@bz"].Value));
45 postedfile.SaveAs(realpath);
46 string urlpath = GetUrl((int)(cmd.Parameters["@id"].Value), (DateTime)(cmd.Parameters["@rq"].Value), extName
47 , (int)(cmd.Parameters["@bz"].Value));
48 imgList.Add(urlpath);
49 }
50 }
51 }
52 finally
53 {
54 cmd.Connection.Close();
55 }
56 }
57 }
58 return imgList;
59 }
60
61 ///<summary>
62 /// 获取图片列表
63 ///</summary>
64 ///<param name="sql"></param>
65 ///<returns></returns>
66 public static DataTable GetImagesList(String sql)
67 {
68 return CMSDB.oDB.GetSQLTab(sql);
69 }
70
71 private static string[] kzm = new String[4] { "gif", "jpg", "png", "jpeg" };
72 ///<summary>
73 /// 图片扩展名判断
74 ///</summary>
75 ///<param name="extName"></param>
76 ///<returns></returns>
77 private static bool isExtName(String extName)
78 {
79 if (kzm.Contains(extName))
80 {
81 return true;
82 }
83 else
84 {
85 return false;
86 }
87 }
88
89 ///<summary>
90 /// 获得图片实际存放的物理路径
91 ///</summary>
92 ///<param name="id">图片id</param>
93 ///<param name="rq">图片上传日期</param>
94 ///<param name="extName">图片格式</param>
95 ///<param name="bz">图片备注</param>
96 ///<returns>返回图片实际存放的物理路径</returns>
97 public static string GetRealPath(int id, DateTime rq, string extName, int bz)
98 {
99 return HttpContext.Current.Server.MapPath(GetPath(id, rq, extName, bz));
100 }
101
102 ///<summary>
103 /// 获得图片的完整的可访问的HTTP URL路径
104 ///</summary>
105 ///<param name="id">图片id</param>
106 ///<param name="rq">图片上传日期</param>
107 ///<param name="extName">图片格式</param>
108 ///<param name="bz">图片备注</param>
109 ///<returns>返回图片的完整的可访问的HTTP URL路径</returns>
110 public static string GetUrl(int id, DateTime rq, string extName, int bz)
111 {
112 StringBuilder sb = new StringBuilder();
113 sb.Append("http://");
114 sb.Append(HttpContext.Current.Request.Url.Host);
115 if (HttpContext.Current.Request.ApplicationPath != "/")
116 {
117 sb.Append(HttpContext.Current.Request.ApplicationPath);
118 }
119 sb.Append(GetPath(id, rq, extName, bz));
120
121 return sb.ToString();
122 }
123
124 #region 获取图片的虚拟路径
125 ///<summary>
126 /// 获得图片的虚拟路径
127 ///</summary>
128 ///<param name="id">图片id</param>
129 ///<param name="rq">图片上传日期</param>
130 ///<param name="extName">图片格式</param>
131 ///<param name="bz">图片备注</param>
132 ///<returns>返回图片的虚拟路径</returns>
133 private static String GetPath(int id, DateTime rq, string extName, int bz)
134 {
135 StringBuilder sb = new StringBuilder();
136 sb.Append("/imgMap/");
137 sb.Append(bz);
138 sb.Append(rq.ToString("/yy/MM"));
139 string dirpath = HttpContext.Current.Server.MapPath(sb.ToString());
140 if (Directory.Exists(dirpath) == false)
141 {
142 Directory.CreateDirectory(dirpath);
143 }
144 sb.Append("/");
145 sb.Append(Convert10To32(id));
146 sb.Append(".");
147 sb.Append(extName.ToString());
148 return sb.ToString();
149 }
150 ///<summary>
151 /// 获得图片的虚拟路径
152 ///</summary>
153 ///<param name="row">包含图片id,图片上传日期,图片格式,图片备注的DataRow</param>
154 ///<returns></returns>
155 private static String GetPath(DataRow row)
156 {
157 StringBuilder sb = new StringBuilder();
158 sb.Append("imgMap/");
159 sb.Append(row["bz"]);
160 sb.Append(((DateTime)row["rq"]).ToString("/yy/MM"));
161 string dirpath = HttpContext.Current.Server.MapPath(sb.ToString());
162 if (Directory.Exists(dirpath) == false)
163 {
164 Directory.CreateDirectory(dirpath);
165 }
166 sb.Append("/");
167 sb.Append(Convert10To32((Int32)row["id"]));
168 sb.Append(".");
169 sb.Append(row["extName"].ToString());
170 return sb.ToString();
171 }
172
173 #endregion
174
175 #region 十进制转换为32进制,并反转
176 ///<summary>
177 /// 十进制转换为32进制
178 ///</summary>
179 ///<param name="Dec"></param>
180 ///<returns></returns>
181 public static String Convert10To32(Int32 n)
182 {
183 var a = n & 0x1f;
184 var b = a.ToString();
185 n >>= 5;
186 while (n > 0)
187 {
188 a = n & 0x1f;
189 b += a.ToString();
190 n >>= 5;
191 }
192 return b.ToString();
193 }
194 #endregion
195 }

给公司项目写的一个图片上传类,其他都这样,在这里,自己认识到了很多的不足,比如进制转换,位运算操作符,都不太理解,自己的专业课其实都有讲到,自己没去哈哈学,后续重新去学习,写一篇关于进制转换,运算符的笔记。

posted @ 2011-11-09 09:39  豆腐欣欣  阅读(414)  评论(0编辑  收藏  举报