c#图片上传和显示的实现方法

由于需要图片上传的功能,所以花了一些时间网上找相关资料终于搞定,效果图如下:

下面的是解决方案截图和上传的图片截图:

具体实现代码如下:

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="上传" onclick="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>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • c#批量上传图片到服务器示例分享

    客户端代码: 复制代码 代码如下: /// <summary>/// 批量上传图片/// </summary>/// <param name="srcurl">服务器路径</param>/// <param name="imagesPath">图片文件夹路径</param>/// <param name="files">图片名称</param>publ

  • C#图片上传效果实例分析

    本文实例讲述了C#图片上传效果实现方法.分享给大家供大家参考.具体如下: <%@ Page Title="" Language="C#" MasterPageFile="~/Default.master" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="Default" %> <asp:Conte

  • C#判断上传文件是否是图片以防止木马上传的方法

    很多时候木马程序会伪装成其他格式的文件上传到网站,最常见的如图片格式.本文就以C#为例讲述C#判断上传文件是否是图片以防止木马上传的方法,具体方法如下: 方法一:用image对象判断是否为图片 /// <summary> /// 判断文件是否为图片 /// </summary> /// <param name="path">文件的完整路径</param> /// <returns>返回结果</returns> pu

  • C#使用Socket上传并保存图片的方法

    本文实例讲述了C#使用Socket上传并保存图片的方法.分享给大家供大家参考.具分析如下: 使用string filename = openFile.FileName;即返回带全路径的文件名 Path.GetFileNameWithoutExtension(filename)即可获得不带路径.后缀名的文件名. 上传图片使用二进制 tcp协议上传的 客户端代码: using System; using System.Collections.Generic; using System.Compone

  • c#多图片上传并生成缩略图的实例代码

    前台代码: 复制代码 代码如下: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="upload.aspx.cs" Inherits="upload" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat=&q

  • C# 最齐全的上传图片方法

    方法里包括了图片大小限制.图片尺寸.文件内容等等的判断... 该案例是mvc下的demo,支持单张图片上传. public ActionResult Upload() { string imgurl = ""; foreach (string key in Request.Files) { //这里只测试上传第一张图片file[0] HttpPostedFileBase file0 = Request.Files[key]; //转换成byte,读取图片MIME类型 Stream st

  • C#保存上传来的图片示例代码

    复制代码 代码如下: [HttpPost] public string UploadImage() { //string ss = Request.Form["uploadFile"]; //return ss; HttpPostedFileBase uploadFile = Request.Files[0]; string fileName = uploadFile.FileName; int fileSize = uploadFile.ContentLength; string f

  • C#实现图片上传(PC端和APP)保存及 跨域上传说明

    A-PC端: 1-页面--multiple是控制单张还是多张图片上传 <input id="BusRoute" type="file" class="btn btn-default btn-lg" style="height:34px;padding-top:5px;padding-bottom:5px;" multiple /> 2-后台获取图片文件: HttpFileCollection pcFileColl

  • ASP.NET(C#)实现一次性动态上传多张图片的代码(多个文件)

    在做asp.net的Web开发的时候,我们经常会遇到一次性上传多个文件的需求.通常我们的解决方法是固定放多个上传文件框,这样的解决办法显然是不合理的,因为一次上传多个,就意味着数量不确定.因此我们就要让这些文件上传框动态添加,下面我以我做的一个图库管理中的上传图片的功能为例 先看效果: 打开的初始界面: 默认是上传一个图片,但当我们点"增加图片"按钮时可以实现选择多个图片及其描述同时上传,本功能限制一次最多只能上传8张,且每张图片大小不超过1M,这个大家可根据实际情况更改! 如图: 下

  • C#实现图片上传与浏览切换的方法

    本文以一个完整实例讲述了C#实现图片上传与浏览切换的方法,对于进行C#程序设计来说具有一定的借鉴价值.分享给大家供大家参考. 具体实现代码如下: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default3.aspx.cs" Inherits="Default3" %> <!DOCTYPE html PUBLIC "-//W3C//

  • 基于C# winform实现图片上传功能的方法

    本文所述实例实现将一张图片上传到指定的文件夹,然后在窗体上的PictrueBox控件中显示出来. 具体功能代码如下: private void btnUpload_Click(object sender, EventArgs e) { //创建一个对话框对象 OpenFileDialog ofd = new OpenFileDialog(); //为对话框设置标题 ofd.Title = "请选择上传的图片"; //设置筛选的图片格式 ofd.Filter = "图片格式|*

随机推荐