asp.net图片上传

来源:互联网 发布:五十知天命六十耳顺 编辑:程序博客网 时间:2024/05/17 04:32

前言

asp.net:一般处理程序.ashx效率比较高效,WebForm(aspx)比较消耗资源,MVC(效率刚好介于两者之间)(用在验证码,上传图片等)


前端代码

第一个input标签忘记写了name属性,结果找了老半天没找出来,吐血。。。导致Request.Files/Request.File[0]一直报错,

<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>    <title></title>    <meta charset="utf-8" /></head><body>    <form action="ProUpload.ashx" method="post" enctype="multipart/form-data">        <input type="file" name="txtFile"/>//name属性不要忘记写,数据是通过name放在发送报文中,name不可缺少。        <input type="text" name="txtUserName" value="" />        <input type="submit" value="提交" />    </form></body></html>

服务端ProUpload.ashx

思路:

  1. 先找到文件名和扩展名,接着根据扩展名判断是否是.jpg格式,这其实有个问题,就是别人可以通过修改扩展名来上传文件,也有可能将病毒上传到服务器;
  2. 接着对为避免出现重复命名的情况而进行Guid方法就行唯一的命名,并且根据不同的天数进行划分文件夹;
  3. 接着上传文件到服务器;
  4. 在浏览器中进行显示。
using System;using System.Collections.Generic;using System.IO;using System.Linq;using System.Web;namespace Uploadfile._2017_9_02{    /// <summary>    /// ProUpload 的摘要说明    /// </summary>    public class ProUpload : IHttpHandler    {        public void ProcessRequest(HttpContext context)        {            context.Response.ContentType = "text/html";            HttpPostedFile file = context.Request.Files[0];//获取上传的文件.            if (file.ContentLength > 0)            {                //对上传的文件类型进行校验。                string fileName = Path.GetFileName(file.FileName);//获取上传文件的名称包含扩展名。                string fileExt = Path.GetExtension(fileName);//获取用户上传的文件扩展名。                if (fileExt == ".jpg")                {                    //1.对上传文件进行重命名?                    string newfileName = Guid.NewGuid().ToString();                    //2:将上传的文件放在不同的目录下面?                    string dir = "/ImageUpload/" + DateTime.Now.Year + "/" + DateTime.Now.Month + "/" + DateTime.Now.Day + "/";                    //创建文件夹                    if (!Directory.Exists(context.Request.MapPath(dir)))                    {                        Directory.CreateDirectory(context.Request.MapPath(dir));                    }                    string fullDir = dir + newfileName + fileExt;//文件存放的完整路径。                    file.SaveAs(context.Request.MapPath(fullDir));                    //  file.SaveAs(context.Request.MapPath("/ImageUpload/"+fileName));//完成文件的保存。                    context.Response.Write("<html><body><img src='" + fullDir + "'/></body></html>");                }                else                {                    context.Response.Write("只能上传图片文件");                }            }            else            {                context.Response.Write("请选择上传文件");            }        }        public bool IsReusable        {            get            {                return false;            }        }    }}

扩展

通过Ajax将图片具体位置的显示?
将图片的路径保存在数据库中?
是否加密?


总结

如果一时找不到学习项目开发的时候,那就从模仿开始,先学习别人开发的经验以及别人开发是的一些小细节,慢慢去模仿,慢慢地到自己能够写出代码,学习应该是站在巨人的肩膀上学习,而不是另起炉灶,这样才能事半功倍,加油!!一步步来,积累开发的知识。不积小流,无以成江海。

原创粉丝点击