图片 音频 视频上传
上传文件使用ashx来处理,该部分代码可以处理任何上传的文件保存到制定文件夹
int LocationID = 0;//图片关联外键 string description = null;//图片描述 int success = 1; public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/plain"; context.Response.Charset = "UTF-8"; HttpFileCollection uploadedFiles = context.Request.Files; Loger.Debug("用户进入接口"); try { if (context.Request["locationid"] != null) { LocationID = Convert.ToInt32(context.Request["locationid"]); } if (context.Request["description"] != null) { description = Convert.ToString(context.Request["description"]); } Loger.Debug(string.Format("用户上传参数:LocationID :{0},description :{1}", LocationID, description)); for (int j = 0; j < uploadedFiles.Count; j++) { HttpPostedFile F1 = uploadedFiles[j]; Loger.Debug(string.Format("用户上传附件数量:{0}", F1.ContentLength)); if (uploadedFiles[j] != null && F1.ContentLength > 0) { string filepath = DateTime.Now.ToString("yyyyMMdd"); //是服务器绝对路径 列如C:\Inetpub\wwwroot\DamangeWebService string path = ConfigurationSettings.AppSettings["Img"].ToString() + "/" + filepath + "/"; Loger.Debug(string.Format("图片上传路径是:{0}", path)); CommonFunc.FolderCreate(path); for (int i = 0; i < uploadedFiles.Count; i++) { HttpPostedFile F = uploadedFiles[i]; if (uploadedFiles[i] != null && F.ContentLength > 0) { //得到上传文件的长度 int upFileLength = F.ContentLength; //Loger.Debug("upFileLength==>" + upFileLength); //得到上传文件的客户端MIME类型 string contentType = F.ContentType; byte[] FileArray = new Byte[upFileLength]; Stream fileStream = F.InputStream; fileStream.Read(FileArray, 0, upFileLength); int index = F.FileName.LastIndexOf('.'); string filename = F.FileName.Replace(F.FileName.Substring(0, index), Guid.NewGuid().ToString()); string pathUrl = path + filename; F.SaveAs(pathUrl); Loger.Debug(string.Format("图片最终保存路径是:{0}", pathUrl)); success = SaveimageToBase(F.ContentLength, pathUrl, F.InputStream); } } } } } catch (Exception ex) { success = 0; Loger.Debug(string.Format("异常原因:{0}", ex.ToString())); } finally { HttpContext.Current.ApplicationInstance.CompleteRequest(); Loger.Debug("success状态===》" + success); context.Response.Write(success); context.Response.Flush(); context.Response.End(); }
由于上传的是图片,直接保存 到文件夹里面。当然也可以顺便把压缩过的图片保存到数据库
中
/// <summary> /// 保存图片到数据库 /// </summary> /// <param name="length">图片大小</param> /// <param name="fileName">名称</param> /// <param name="stream">图片文件流</param> /// <returns></returns> private int SaveimageToBase(double length, string fileName, Stream stream) { int success = 1; System.Drawing.Image original_image = null; System.Drawing.Bitmap final_image = null; System.Drawing.Graphics graphic = null; original_image = System.Drawing.Image.FromStream(stream); int width = original_image.Width; int height = original_image.Height; int target_width = 400; int target_height = 300; int new_width, new_height; try { float target_ratio = (float)target_width / (float)target_height; float image_ratio = (float)width / (float)height; if (target_ratio > image_ratio) { new_height = target_height; new_width = (int)Math.Floor(image_ratio * (float)target_height); } else { new_height = (int)Math.Floor((float)target_width / image_ratio); new_width = target_width; } new_width = new_width > target_width ? target_width : new_width; new_height = new_height > target_height ? target_height : new_height; final_image = new System.Drawing.Bitmap(target_width, target_height); graphic = System.Drawing.Graphics.FromImage(final_image); graphic.FillRectangle(new System.Drawing.SolidBrush(System.Drawing.Color.Black), new System.Drawing.Rectangle(0, 0, target_width, target_height)); int paste_x = (target_width - new_width) / 2; int paste_y = (target_height - new_height) / 2; graphic.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic; graphic.DrawImage(original_image, paste_x, paste_y, new_width, new_height); MemoryStream ms = new MemoryStream(); final_image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg); // DisasterImageSound 这个是保存图片的对象 DisasterImageSound Model = new DisasterImageSound(); Model.Data = ms.GetBuffer(); Model.LocationID = Convert.ToInt32(LocationID); Model.FileSize = length; Model.ContentType = fileName; Model.Description = description; new BLL.DisasterImageSound().Add(Model); } catch (Exception ex) { success = 0; Loger.Debug(string.Format("SaveimageToBase异常.异常愿意:{0}", ex.ToString())); } return success; }
调用ashx 方法 url可以添加各种参数。同理可以在ashx可以获取到 ,url 是ashx部署的地址,Server.MapPath("TMp/" + filename) 这个是文件
string url = ConfigurationSettings.AppSettings["ImgUrl"].ToString(); System.Net.WebClient myWebClient = new System.Net.WebClient(); myWebClient.UploadFile(url, "POST", Server.MapPath("TMp/" + filename));