• %@ Page Language="C#" AutoEventWireup="true" CodeBehind="UploadPic.aspx.cs" Inherits="Pic_Try.UploadPic" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://w...

    1.界面代码

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="UploadPic.aspx.cs" Inherits="Pic_Try.UploadPic" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
      <title>图片上传和显示</title>
      <style type="text/css">
      .pic_text{ color:Red;}
      .pic_label { color:Gray; margin-top:5px; margin-bottom:5px;}
      .pic_image { margin:5px;}
      </style>
    </head>
    <body>
      <form id="form1" runat="server">
      <div class="pic_image"><asp:Image ID="pic" runat="server" /></div>
      <div><asp:FileUpload ID="pic_upload" runat="server" /><asp:Label ID="lbl_pic" runat="server" class="pic_text"></asp:Label></div>
      <div class="pic_label">上传图片格式为.jpg, .gif, .bmp,.png,图片大小不得超过8M</div>
      <div><asp:Button ID="btn_upload" runat="server" Text="上传" οnclick="btn_upload_Click"/></div>
      </form>
     
    </body>
    </html>
    
    

    2.后台代码UploadPic.aspx.cs

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.IO;
    using System.Security.Cryptography;
    using System.Web.Security;
    
    namespace Pic_Try
    {
      public partial class UploadPic : System.Web.UI.Page
      {
        protected void Page_Load(object sender, EventArgs e)
        {
    
        }
    
        protected void btn_upload_Click(object sender, EventArgs e)
        {
          Boolean fileOk = false;
          if (pic_upload.HasFile)//验证是否包含文件
          {
            //取得文件的扩展名,并转换成小写
            string fileExtension = Path.GetExtension(pic_upload.FileName).ToLower();
            //验证上传文件是否图片格式
            fileOk = IsImage(fileExtension);
    
            if (fileOk)
            {
              //对上传文件的大小进行检测,限定文件最大不超过8M
              if (pic_upload.PostedFile.ContentLength < 8192000)
              {
                string filepath = "/images/";
                if (Directory.Exists(Server.MapPath(filepath)) == false)//如果不存在就创建file文件夹
                {
                  Directory.CreateDirectory(Server.MapPath(filepath));
                }
                string virpath = filepath + CreatePasswordHash(pic_upload.FileName, 4) + fileExtension;//这是存到服务器上的虚拟路径
                string mappath = Server.MapPath(virpath);//转换成服务器上的物理路径
                pic_upload.PostedFile.SaveAs(mappath);//保存图片
                //显示图片
                pic.ImageUrl = virpath;
                //清空提示
                lbl_pic.Text = "";
              }
              else {
                pic.ImageUrl = "";
                lbl_pic.Text = "文件大小超出8M!请重新选择!";
              }
            }
            else {
              pic.ImageUrl = "";
              lbl_pic.Text = "要上传的文件类型不对!请重新选择!";
            }
          }
          else
          {
            pic.ImageUrl = "";
            lbl_pic.Text = "请选择要上传的图片!";
          }
        }
    
        /// <summary>
        /// 验证是否指定的图片格式
        /// </summary>
        /// <param name="str"></param>
        /// <returns></returns>
        public bool IsImage(string str) {
          bool isimage = false;
          string thestr = str.ToLower();
          //限定只能上传jpg和gif图片
          string[] allowExtension = { ".jpg", ".gif", ".bmp",".png" };
          //对上传的文件的类型进行一个个匹对
          for (int i = 0; i < allowExtension.Length; i++)
          {
            if (thestr == allowExtension[i])
            {
              isimage = true;
              break;
            }
          }
          return isimage;
        }
    
        /// <summary>
        /// 创建一个指定长度的随机salt值
        /// </summary>
        public string CreateSalt(int saltLenght)
        {
          //生成一个加密的随机数
          RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
          byte[] buff = new byte[saltLenght];
          rng.GetBytes(buff);
          //返回一个Base64随机数的字符串
          return Convert.ToBase64String(buff);
        }
    
        
        /// <summary>
        /// 返回加密后的字符串
        /// </summary>
        public string CreatePasswordHash(string pwd, int saltLenght)
        {
          string strSalt = CreateSalt(saltLenght);
          //把密码和Salt连起来
          string saltAndPwd = String.Concat(pwd, strSalt);
          //对密码进行哈希
          string hashenPwd = FormsAuthentication.HashPasswordForStoringInConfigFile(saltAndPwd, "sha1");
          //转为小写字符并截取前16个字符串
          hashenPwd = hashenPwd.ToLower().Substring(0, 16);
          //返回哈希后的值
          return hashenPwd;
        }
      }
    }
    
    

    3.最后防止上传大文件图片时报错,配置文件添加配置Web.config

    <?xml version="1.0" encoding="utf-8"?>
    
    <!--
     有关如何配置 ASP.NET 应用程序的详细消息,请访问
     http://go.microsoft.com/fwlink/?LinkId=169433
     -->
    
    <configuration>
      <system.web>
       <compilation debug="true" targetFramework="4.0" />
       <httpRuntime executionTimeout="240" maxRequestLength="8192000"/>
      </system.web>
    
    </configuration>
    展开全文
  • C#图片上传与下载

    2017-09-07 15:25:22
    1、上传: html页面代码: --> 一般处理程序: try { if (context.Request.Files.Count > 0) { //判断文件大小

    1、上传:

    html页面代码:
    <form name="form1" method="post" action="Handler1.ashx" enctype="multipart/form-data">
        <!--<form name="form1" method="post" action="WebForm2.aspx" enctype="multipart/form-data">-->
        <input id="files" name="files" type="file" />
        <input id="Submit1" type="submit" value="submit" />
    </form>

    一般处理程序:

        try
                {             
                    if (context.Request.Files.Count > 0)
                    {
                        //判断文件大小  
                        int length = context.Request.Files[0].ContentLength;
                        if (length > 52428800)
                        {
                            context.Response.Write("文件大于50M,不能上传");
                            return;
                        }
    
                        string type = context.Request.Files[0].ContentType;
                        string fileExt = Path.GetExtension(context.Request.Files[0].FileName).ToLower();
                        //只能上传图片,过滤不可上传的文件类型  
                        string fileFilt = ".gif|.jpg|.php|.jsp|.jpeg|.png|......";
                        if (fileFilt.IndexOf(fileExt) <= -1)
                        {
                            context.Response.Write("对不起!请上传图片!!");
                            return;
                        }
                        else
                        {
                            Page p = new Page();
                            string fileName = p.Server.MapPath(_directory) + "\\" + DateTime.Now.ToString("yyyyMMddHHmmssfff") + rnd.Next(10, 99).ToString()
                                + fileExt;
    
                            // // 如果是aspx页面,这里直接Server.MapPath...
                            //string fileName = Server.MapPath(_directory) + "\\" + DateTime.Now.ToString("yyyyMMddHHmmssfff") + rnd.Next(10, 99).ToString()
                            //+fileExt;
                            context.Request.Files[0].SaveAs(fileName);
                            context.Response.Write("上传成功!");
                        }
                    }
                    else
                    {
                        context.Response.Write(context.Request.Files.Count);
                    }
                }
                catch (Exception ex)
                {
                    throw new Exception(ex.Message);
                }
    相关文档(C#上传与下载):http://blog.csdn.net/pan_junbiao/article/details/7185382
    关于form表单标签的enctype属性的作用:http://blog.csdn.net/user_longling/article/details/38538479

    展开全文
  • 掉了稍多坑,终于是能正常上传图片和保存了(gif的格式暂时存储成了jpg,现在只考虑静态图片部分),先上丑丑的效果图,点击图上的“+”号可以新增 后台存储图片路径pfb/UploadFiles: 一、前端页面+CSS...

    掉了稍多坑,终于是能正常上传图片和保存了(gif的格式暂时存储成了jpg,现在只考虑静态图片部分),先上丑丑的效果图,点击图上的“+”号可以新增

    后台存储图片路径pfb/UploadFiles:

     一、前端页面+CSS文件+js文件:选择图片后,将图片转成流通Ajax去请求后台(这里传入图片类型,用来区分是png还是jpg或者其他文件)

    1、html:和jq相关的库网上可以下载

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>图片上传测试</title>
    <link href="upload2/demo.css" rel="stylesheet"/>
    <link rel="Shortcut icon" href="http://www.jq22.com/favicon.ico" />
    <script src="jq/jquery.min.js"></script>
    <script src="upload2/jquery.qrcode.min.js"></script>
    <script src="upload2/compressFile.js"></script>
    <style>
    body{ background:#FFF;padding:10px;}
    p {  text-indent:2em; }
    font-test { color:#F00; }
    .div-contract { height: 80px;}  
    .div-content { }
    .inpt{  border:none;border-bottom:1px solid #999;}
    .inpt-red { border:none; border-bottom:1px solid #F00}
    .noborder  {  border:none; }
    .bold { font-weight:bold }
    </style>
    </head>
    
    <body>
    <div class ="body-div-all">
    <font style="color:#FF0000">测试</font>
    <div class = "div-contract">
    <table class = "noborder" align="left">
    <tr >
    <td class = "bold" align="left">测试编号:<input type="text" name="contractCode" class="inpt"></td>
    </tr>
    <tr >
    <td class = "bold" align="left">测试地点:<input type="text" name="contractSignPlace" class="inpt"></td>
    </tr>
    <tr >
    <td class = "bold" align="left">测试时间:<input type="text" name="contractSignYear" class="inpt">年
    <input type="text" name="contractCode" class="inpt">月
    <input type="text" name="contractSignDay" class="inpt">日</td>
    </tr>
    </table>
    
    </div>
    
    <!--开始-->
    <div style = " display:block;">
    <div>
    <input type="file" style="display: none" name="input_0" accept="image/*" multiple >
    <!--<button id = "testpic">上传图片测试</button>-->
    </div>
    
    <ul id = "test-ul">
    <li id = "upload-li" style= "background: #eeeeee; "><img style = "margin:50px;" src = "upload2/addicon.png"/></li>
    </ul>
    </div>
    <!--结束-->
    
    </div>
    <script type="text/javascript">
    /*<![CDATA[ */
    var maxsize = 1000 * 1024;  //1Mb
    var imagebase64Array = [];
    var idAdd = 0;
    var isAddPic = false;
    $(document).ready(function (){
        $(function () {
          //$('li').cloneNode(6);//复制66个节点
          //点击触发input
          $('#upload-li').each(function (i) {
            $(this).click(function () {
              $('input').attr("name",'input_'+i).click();
            })
          });
    
          $("input").change(function () {
    	    var files = Array.prototype.slice.call(this.files);
            var filelength = files.length;
    	    files.forEach(function(file, i) {
                var fileType =  file.type;
    		    if (!/\/(?:jpeg|png|gif|jpg)/i.test(fileType)) {
                     alert("请上传图片文件");
                     return; 
                }else{
                     console.log("fileType = "+fileType);
                }
                //let index = parseInt(($(this).attr('name')).split("_")[1]);
                var size = file.size / 1024 > 1024 ? (~~(10 * file.size / 1024 / 1024)) / 10 + "MB" : ~~(file.size / 1024) + "KB";
                
                    var reader = new FileReader();
                    reader.readAsDataURL(file);  
                    reader.onload = function (e) {
                        //console.log(e);
    		            var result = reader.result;
                        var img = new Image(); 
                        img.src = e.target.result;
    
                     if( result.length >= maxsize && fileType != "image/gif"){  //gif的不要变成图片啊
                        //图片加载完毕之后进行压缩,然后上传
                        if (img.complete) {
                            callback();
                        } else {
                            img.onload = callback;
                        }
    
                        function callback() {
                              var dataInfo = compress(img);
                              console.log("大于1MB,dataInfo = "+dataInfo);
                              fileType = "image/jpeg";
                              uploadPic("/pfb/HandlerPic2.ashx?type="+fileType,dataInfo);
                        }
                              
                      }else {
                         console.log("小于1MB(或者是gif),result = "+result);
                         //上传
                         uploadPic("/pfb/HandlerPic2.ashx?type="+fileType,result);
                      }
                         
                     }
                
            });
            
          })
        })
     });
    
     function uploadPic(urlform,dataInfo){
        var a = $.ajax({
            type:"POST",
            url:urlform,
            data:dataInfo,
            dataType:"text",
            contentType: "application/html; charset=utf-8",
            success: function(res){
                   console.log("1 -"+res);
                   var result = $.parseJSON(res);
                   idAdd++;
                   if(!isAddPic){
                         isAddPic = true;
                         $("#test-ul").prepend('<li id = "li'+idAdd+'" style = ""></li>');
                   }else{
                         $("#li"+(idAdd-1)).after('<li id = "li'+idAdd+'" style = ""></li>');
                   }
                   $("#li"+idAdd).css({"background-image":"url('"+result.data.path+"')"});
             }
         });
     }
    
    /*]]>*/
    </script>
    </body>
    </html>

    2、demo.css、compressFile.js

    ol,ul{list-style:none}blockquote,q{quotes:none}blockquote:before,blockquote:after,q:before,q:after{content:'';content:none}:focus{outline:0}ins{text-decoration:none}del{text-decoration:line-through}table{border-collapse:collapse;border-spacing:0}a{text-decoration:none;color:#fff}#switcher{height:54px;background:url(bg2.png) repeat-x;z-index:99999;position:fixed;width:100%;top:0;background:#000}.center{width:100%;padding-top:0}
    .center ul li{display:inline;float:left;position:relative}
    ul{
        width: 1200px;
        margin: 10px auto;
        height:auto;
    	display:block;
    	/*flex-direction: row;
        flex-wrap: wrap;
        justify-content: flex-start;
    	display: flex;*/
    }
    ul li{
        background: #00a2d4;
        list-style: none;
        flex-grow:10;
        width: 300px;
        height: 300px;
        margin: 10px;
        border: 1px solid #f2f2f2;
        justify-content: center;
        align-items: center;
        cursor: pointer;
        background-repeat: no-repeat;
        background-size: cover;
        box-sizing: border-box;
    	background-size:100% 100%;
    	float:left;
    	display:inline;
    	/*display: flex;*/
    }
      
    //用于压缩图片的canvas
    	var canvas = document.createElement("canvas");
    	var ctx = canvas.getContext('2d');
    	// 瓦片canvas
    	var tCanvas = document.createElement("canvas");
    	var tctx = tCanvas.getContext("2d");
    	var maxsize = 100 * 1024;
    	//使用canvas对大图片进行压缩
    	function compress(img) {
    		var initSize = img.src.length;
    		var width = img.width;
    		var height = img.height;
    		var bili = 1;
    		if(width>480){
    			bili = 480/width;
    		}else{
    			if(height>640){
    				bili = 640/height;
    			}else{
    				bili=1;
    			}
    		}
    		//如果图片大于四百万像素,计算压缩比并将大小压至400万以下
    		var ratio;
    		if ((ratio = width * height / 4000000) > 1) {
    			ratio = Math.sqrt(ratio);
    			width /= ratio;
    			height /= ratio;
    		} else {
    			ratio = 1;
    		}
    		canvas.width = width;
    		canvas.height = height;
    		// 铺底色
    		ctx.fillStyle = "#fff";
    		ctx.fillRect(0, 0, canvas.width, canvas.height);
    	
    		//如果图片像素大于100万则使用瓦片绘制
    		var count;
    		if ((count = width * height / 1000000) > 1) {
    			count = ~~(Math.sqrt(count) + 1); //计算要分成多少块瓦片
    			//计算每块瓦片的宽和高
    			var nw = ~~(width / count);
    			var nh = ~~(height / count);
    			tCanvas.width = nw;
    			tCanvas.height = nh;
    			for (var i = 0; i < count; i++) {
    				for (var j = 0; j < count; j++) {
    					tctx.drawImage(img, i * nw * ratio, j * nh * ratio, nw * ratio, nh * ratio, 0, 0, nw, nh);
    					ctx.drawImage(tCanvas, i * nw, j * nh, nw, nh);
    				}
    			}
    		} else {
    			ctx.drawImage(img, 0, 0, width, height);
    		}
    		//进行最小压缩
    		var ndata = canvas.toDataURL('image/jpeg', bili);
    		tCanvas.width = tCanvas.height = canvas.width = canvas.height = 0;
    		return ndata;
    	}

    二、后台ashx:这个文件里处理上传的流是踩坑重点,一定要弄清楚前端穿过来的数据

    using System;
    using System.Collections.Generic;
    using System.Data;
    using System.Data.Sql;
    using System.Data.SqlClient;
    using System.Web;
    using System.Web.UI;
    using System.IO;
    using System.Linq;
    using System.Net;
    using System.Text;
    using System.Drawing;
    using System.Web.SessionState;
    
    namespace WebApplication1.pfb
    {
        /// <summary>
        /// HandlerPic2 的摘要说明
        /// </summary>
        public class HandlerPic2 : IHttpHandler
        {
    
            public void ProcessRequest(HttpContext context)
            {
                //context.Response.ContentType = "text/plain";
                //context.Response.Write("Hello World");
                HttpRequest hRequest = context.Request;
                HttpResponse hResponse = context.Response;
                string fk;
                int code = 1; //默认状态为1
                //string fileNameList = "{}";
                string fileStream = "";
                string dateString = "";
                string fileName = "";
                string filePathR = "";
                System.IO.Stream s = hRequest.InputStream;
                string type = hRequest.QueryString["type"].ToString();
                string lastType = "jpg";
                if (type.IndexOf("image/") >= 0)
                {
                    int index = type.IndexOf("/");
                    int length = type.Length;
                    lastType = type.Substring(index + 1, 3);
                    if (lastType == "jpe" || lastType == "gif" || lastType == "bmp")
                    {
                        lastType = "jpg";
                    }
                }
                try
                {
                    DateTime date = DateTime.Now;
                    dateString = date.ToString(@"yyyy\-MM\-dd HH\:mm\:ss\:ff");
                    //转换文件名前缀用时间
                    string time = dateString.Replace("-", "");
                    time = time.Replace(":", "");
                    time = time.Replace(" ", "");
                    fileName = time + "-pfb." + lastType;
                    //filePathR = urlconvertor(context);
                    fileStream = WriteFile(s, fileName, lastType);
                    fk = "success";
                    code = 0;  //0表示上传成功
                }
                catch (Exception ex)
                {
                    fk = "failure-" + ex.ToString();
                }
                string res = "{'code':" + code + ",'msg':'" + fk + "','data':{'fileNameList':['" + fileName + "'],'path' : '" + fileStream + "'}}";
                res = res.Replace("\'", "\"");
                context.Response.ContentType = "text/plain";
                context.Response.Write(res);
                context.Response.End();
            }
    
            private string WriteFile(System.IO.Stream stream, string fileName, string lastType)
            {
                int count = 0;
                byte[] buffer = new byte[1024];
                StringBuilder builder = new StringBuilder();
                while ((count = stream.Read(buffer, 0, 1024)) > 0)
                {
                    builder.Append(Encoding.UTF8.GetString(buffer, 0, count));
                }
                stream.Flush();
                string UserPhoto = builder.ToString();
                return decodeBase64ToImage(UserPhoto, "UploadFiles", fileName, lastType);
            }
    
            public string decodeBase64ToImage(string dataURL, string path, string fileName, string lastType)
            {
                string imagesurl2 = "";
                string filePathR = "";//声明一个string类型的相对路径
                path = HttpContext.Current.Server.MapPath(path + "/");
                string inputStr = dataURL.Substring(dataURL.IndexOf(",") + 1);      //将‘,’以前的多余字符串删除
                System.Drawing.Bitmap bitmap = null;//定义一个Bitmap对象,接收转换完成的图片
                try//会有异常抛出,try,catch一下
                {
                    string tmpRootDir = HttpContext.Current.Server.MapPath(System.Web.HttpContext.Current.Request.ApplicationPath.ToString()); //获取程序根目录 
                    
                    byte[] arr = Convert.FromBase64String(inputStr);//将纯净资源Base64转换成等效的8位无符号整形数组
                    filePathR = path + fileName;//所要保存的相对路径及名字-全路径
                    imagesurl2 = filePathR.Replace(tmpRootDir+ @"pfb\" , ""); //转换成相对路径
                    imagesurl2 = imagesurl2.Replace(@"\", @"/");
                    using (System.IO.MemoryStream ms = new System.IO.MemoryStream(arr))
                    {//转换成无法调整大小的MemoryStream对象
                        System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(ms);//将MemoryStream对象转换成Bitmap对象
                        ms.Close();//关闭当前流,并释放所有与之关联的资源
                        bitmap = new System.Drawing.Bitmap(bmp);
                        bmp.Dispose();
                    }
                    if (lastType == "png")
                    {
                        bitmap.Save(filePathR, System.Drawing.Imaging.ImageFormat.Png);//保存到服务器路径
                    }
                    /*else if (lastType == "gif")
                    {
                        bitmap.Save(filePathR, System.Drawing.Imaging.ImageFormat.Gif);//保存到服务器路径
                    }*/
                    else {
                        bitmap.Save(filePathR, System.Drawing.Imaging.ImageFormat.Jpeg);//保存到服务器路径
                    }
                    
                }
                catch (Exception ex)
                {
                    return ex.ToString();
                    //return filePathR;
                }
                finally
                {
                    if (bitmap != null)
                    {
                        bitmap.Dispose();
                        bitmap = null;
                    }
                }    
                return imagesurl2;//返回相对路径
            }
    
            public static byte[] stream2byte(Stream stream)
            {
                byte[] buffer = new byte[stream.Length];
                stream.Read(buffer, 0, buffer.Length);
                //stream.Seek(0, SeekOrigin.Begin);
                return buffer;
            }
    
            public bool IsReusable
            {
                get
                {
                    return false;
                }
            }
        }
    }

    要注意的“坑”:

    1、把前端传入的数据完美接收(由于上传的不是file,所以这里不能用file的方法接收):

               int count = 0;
                byte[] buffer = new byte[1024];
                StringBuilder builder = new StringBuilder();
                while ((count = stream.Read(buffer, 0, 1024)) > 0)
                {
                    builder.Append(Encoding.UTF8.GetString(buffer, 0, count));
                }
                stream.Flush();
                string UserPhoto = builder.ToString();

    2、前端传过来是base64且包含一些非图片需要的开头,所以我们在转换的时候要先去掉头信息

    string inputStr = dataURL.Substring(dataURL.IndexOf(",") + 1);      //将‘,’以前的多余字符串删除dataURL即UserPhoto

    3、存放路径一定要确保存在且正确

    filePathR = path + fileName;//所要保存的相对路径及名字-全路径

    4、GDI+ 中发生一般性错误 :这个我也是百度参考的,下面的连接写得不错

    https://blog.csdn.net/weixin_33905756/article/details/86216148

     

     

     

    展开全文
  • C#实现winform下图片上传预览保存以及在桌面应用系统的应用 图片上传、预览、保存操作在许多应用系统中经常需要用到,比如员工的头像即为一个典型的案例。在很多应用系统中,比如C#的B/S、C/S系统,java开发的...

    C#实现winform下图片的上传预览保存以及在桌面应用系统的应用

        图片的上传、预览、保存操作在许多应用系统中经常需要用到,比如员工的头像即为一个典型的案例。在很多应用系统中,比如C#的B/S、C/S系统,java开发的B/S、C/S系统等等,都无疑会涉及到 “图片或者文档”之类的“文件”的管理操作。

        我在校期间,曾经带领另外三位伙伴共同开发“佛山市邮政管理局-特种行业摩托车管理系统”,在其中就涉及到了员工的头像的管理以及企业附件(其实就是一系列的“文档”啦)的管理,那会由于年轻,对于这些文件的处理是直接将其二进制流存进数据库中,殊不知在后期,这个员工越来越多,二进制流数据的存储也暴增,导致一系列难以想象的问题(“可惜后来毕业了,就不参与维护了,至今只是听说过该系统由于涉及的员工数据不是很多,故而系统用的还行,后来就没去追究了!”),如今,我自己开发了一套企业使用的工资管理系统,其中涉及到员工的图片以及附件的管理。为此摒弃了以前“直接将图片的内容,即二进制流存进数据库中”的做法,而是“将实际图片存储在应用程序的某个文件夹下,并将此存储路径存储在数据库表对应的字段中”。

        下面以我自主开发的工资管理系统为例,介绍一下C#在winform C/S桌面应用系统下对于图片的管理操作(若想深入的了解整个系统或者需要整个系统的源码,可以加我QQ:1948831260(记得备注:桌面应用系统),我愿意与您交流或者出售给你)!而对于采用java C/S或者B/S的实现,我以前也实现过,比如jsp上传预览保存图片、struts2上传预览保存图片、springMVC上传预览保存图片我都干过,只不过那会要不是简单的demo,自己做着玩,要不就是在公司的项目中使用!总之,这些原理都是不离其宗的,即“数据库存储的是图片的存储路径,图片真正存放的路径是在应用系统的某个文件夹下”,而且,其相应的实现可以在百度一搜即可实现了!!

        在C# winform下,上传预览控件主要采用pitureBox控件和openFileDialog实现,其中,pitureBox用于显示图片,openFileDialog用于上传图片到pitureBox控件中进行预览!主要界面和代码如下:

        “上传相片”的事件代码:

     

            //上传相片
            private void buttonUpLoadImage_Click(object sender, EventArgs e)
            {
                try
                {
                    openFileDialogEmpImage.Filter = "*.jpg|*.jpg|*.png|*.png|*.bmp|*.bmp|*.tiff|*.tiff";//图片格式
                    if (openFileDialogEmpImage.ShowDialog() == DialogResult.OK)
                    {
                        isUpLoadPicture = true;//记录是否上传了相片,用于后面保存操作使用:是一个成员变量
                        try
                        {
                            empUpLoadPictureRealPos = openFileDialogEmpImage.FileName;//实际的文件路径+文件名
                            String[] empImageData = empUpLoadPictureRealPos.Split('.');
                            //empImageData[1]:是上传的图片的后缀名
                            empUpLoadPictureFormat = empImageData[1];
                            PictureBoxYuanGongXiangPian.Image = Image.FromFile(empUpLoadPictureRealPos);//将图片显示在pitureBox控件中
                        }
                        catch
                        {
                            MessageBox.Show("您选择的图片不能被读取或文件类型不对!", "错误信息", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        }
                    }
                }
                catch (System.Exception ex)
                {
                    MessageBox.Show("上传相片出错: " + ex.Message);
                }
            }


        之后是保存相片的操作,这才是重点!在我自主开发的工资管理系统中,我将图片存储在项目启动路径(即bin目录下)下面的images文件夹下!如下图所示:

     

        之后是保存图片的操作:

     

    <span style="font-size:14px;">                String empImageName = "";
                    //开始保存:需要根据是否上传了员工相片保存员工相片
                    if (isUpLoadPicture == true)
                    {
                        //说明上传了相片
    
                        //设置员工相片的名字:以系统当前时间来命名:<span style="color:#ff0000;">其中cmmUtils工具类在前几篇博文已经给出源代码</span>
                        empImageName = cmmUtils.getSystemCurrentTime() + "." + empUpLoadPictureFormat;
    
                        //存储员工相片的实际路径
                        String empImgStoreDestPath = employeeService.setEmpImageRealStoreLocation(empImageName);
                        cmmUtils.stoteImage(empUpLoadPictureRealPos, empImgStoreDestPath);//将图片移动到目标位置,实现图片的真正保存!
                    }
                    else
                    {
                        //没有上传相片
                        empImageName = "default.jpg";
                    }</span>

     

     

     

     

     

     

    
     

         下面是整体的实现效果!

     

        点击保存,发生的事件以及结果:

        点击下一页  或者  输入“多”进行查询,都可以得到下面的效果:

     

        而右下角,则是采用pitureBox显示:单击dataGridView列表中某一行的数据时显示该条数据的信息!最后介绍一下如何将该图片从“实际的文件夹下加载到pitureBox控件中”:

        主要是这个方法起作用

            /// <summary>
            /// 读取员工相片
            /// </summary>
            /// <param name="empImageName">数据库存储的员工的相片名:imagePosition</param>
            /// <param name="myImage">pitureBox控件名称</param>
            public void readEmpImage(String empImageName, PictureBox myImage)
            {
                String imageLocation = Application.StartupPath.ToString() + "\\images\\employee\\";//这个就是上文介绍的图片实际存储的文件夹路径
                try
                {
                    String imageRealPath = imageLocation + empImageName;
                    myImage.Image = Image.FromFile(imageRealPath);
                }
                catch (System.Exception ex)
                {
                    String imageRealPath = imageLocation + "default.jpg";
                    myImage.Image = Image.FromFile(imageRealPath);
                    Console.WriteLine("读取员工相片发生异常: " + ex.Message);
                }
            }


         好了,关于图片在应用系统的上传预览保存操作就介绍到这里了!欢迎留言交流后者加QQ交流!后期会采用同样的道理实现工资管理系统中员工的附件的上传查看以及修改保存管理,敬请期待!

     

        下一博文,将介绍工资管理系统中的员工管理模块   !

    展开全文
  • 很可惜的是无法从前端获取到上传文件的绝对地值,因为传过来的是fakepath/filename。然后我又上网百度怎么获取真实地址,有的是通过修改浏览器设置(个人感觉违反了用户体验),也有代码修改的(不过不能适用所有...

    先讲一下我最开始的思路,①从前端获取附件地址,然后根据地址获取文件,将文件以2进制数组的方式存入buf数组。②创建新地址,将2进制数组复制到新地址。很可惜的是无法从前端获取到上传文件的绝对地值,因为传过来的是fakepath/filename。然后我又上网百度怎么获取真实地址,有的是通过修改浏览器设置(个人感觉违反了用户体验),也有代码修改的(不过不能适用所有浏览器),正当绝望的时候,才知道可以从前端穿过来附件实体(暂时这么认为吧)。

    文件上传具体关键步骤:①设置form表单enctype="multipart/form-data"   input  type="file"  ②设置后端c#获取文件的参数类型 HttpPostedFileBase file

    ③通过c#封装好的方法file.SaveAs("路径");将文件存入新的地址中。


      public ActionResult YWXXJLBSave(string paraYQ_1, string xxdd, string xxsj, string xxzjr, string xxchrmc, string xxzt, string xxnr,HttpPostedFileBase file) 
            {
                var flg = false;
                string savePath = null;


                //图片上传到服务
                //指定上传文件在服务器上的保存路径
                if (file != null)
                {
                    string filename = file.FileName;
                     savePath = Server.MapPath("~/UploadImage/");
                    //检查服务器上是否存在这个屋里路径,如果不存在则创建
                    if (!System.IO.Directory.Exists(savePath))
                    {
                        System.IO.Directory.CreateDirectory(savePath);
                    }
                    savePath = savePath + "\\" + filename;
                    file.SaveAs(savePath);//保存文件


                }

    return null;
              }


    前端 代码: @using (Html.BeginForm("YWXXJLBSave", "Books", FormMethod.Post, new { @class = "form-horizontal", @id = "frmYWXX", @enctype = "multipart/form-data" }))
        {

      <div class="form-group">
                        <label class="col-sm-3 control-label no-padding-right" for="form-field-1-1"> 参加者签名 </label>
                        <div class="col-sm-9">
                            <input type="file" id="id-input-file-2" name="file" />
                        </div>
                    </div>

    }


    再说一下,个人认为其实SaveAs方法封装的就是上面的思路。




    展开全文
  • public void ProcessRequest(HttpContext context) { HttpPostedFile uploadFile = context.Request.Files["file"]; string fileName = Path.GetFileName(uploadFile.FileName);
  • C# 上传图片

    2020-07-08 23:31:03
    C# 上传图片C# 上传图片C# 上传图片C# 上传图片C# 上传图片C# 上传图片
  • 远程服务器上需要部署一个接收图片数据的服务 有很多方式,会慢慢补充过来 客户端代码 使用WebService  private void button1_Click(object sender, EventArgs e)  {  WebService1SoapClient ssc = new ...
  • 用于winform的图片上传下载,带图片预览,源码项目
  • 摘要:文章:超强C#图片上传,加水印,自动生成缩略图源代码(联高原创) 摘要:北京联高软件开发有限公司倾情奉献经过测试的超强C#图片上传,加水印,自动生成缩略图源代码。可以指定水印位置、文字;可以设,发表于...
  • C# WinForm 上传图片 文件到服务器的方法Uploader ashx.txt 参考代码
  • 这篇文章主要介绍了C#判断上传文件是否是图片以防止木马上传的方法,对于网络安全来说至关重要,需要的朋友可以参考下 很多时候木马程序会伪装成其他格式的文件上传到网站,最常见的如图片格式。本文就以C#为例讲述...
  • C#实现上传图片

    2016-06-28 18:40:46
    上传图片是日常开发中经常遇到的,近日经理给我分配了一个任务,就是实现图片上传。其实之前也做过上传的功能,当时没有具体的实现,仅仅做了一部分了解。不过,这样最起码已经给自己增加了一份信心,至少不会...
  • C#MVC上传图片或文档

    2020-06-03 23:33:38
    我的项目要求上传一个JPG图片和一个WPS的文档。项目完成后,特此把此功能进行整理,并进行分享,希望对大家有帮助
  • C#图片压缩上传

    2019-07-14 16:19:49
    /// <summary>... /// 压缩图片 /// </summary> /// <param name="iSource">图片文件</param> /// <param name="outPath">路径</param> 例如 var ou...
  • WebService上传、下载显示图片,有需要的下载! 解压密码:www.cnblogs.com/xvqm00
  • C#上传图片方法

    2018-05-30 08:46:20
    该案例是mvc下的demo,支持单张图片上传。1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556public ActionResult Upload() { string imgurl = "&...
  • WebUploader 图片上传插件 前后端 C#代码
  • C#上传下载图片

    2018-07-19 13:24:53
    1.首先我们通过流来上传下载图片,所有操作只停留在流这一层 MemoryStream ms; //左侧按钮 private void button1_Click(object sender, EventArgs e) { ms = new MemoryStream(); Image...
  • 能够上传照片到网络共享的指定文件夹,并且能够按照要求修改照片的名字
1 2 3 4 5 ... 20
收藏数 21,879
精华内容 8,751