文件上传(页面端)

1.文件上传必须用post提交
2.必须修改表中提交数据时的组织方式,即enctype=“multipart/form-data”,数据是以分隔符的方式提交的
3.enctype="application/x-www-form-urlencoded"默认以键值对的方式提交,因此不适合文件上传
enctype默认值就是application/x-www-form-urlencoded
-------------------------------------------------------------------------
<form action="processUpload.ashx" method="post" enctype="multipart/form-data">
 请选择文件  <input type="file" name="name" value="" />
<input type="submit"  value="提交" />

</form>

服务器端单文件上传

1.获取用户上传的文件
2.将文件另存为服务器的目录下

if (context.Request.Files.Count>0)
    {
        HttpPostedFile fileData = context.Request.Files[0];
        if (fileData.ContentLength>0)//文件的字节数是否大于0
        {
            string new_fileName = Guid.NewGuid().ToString() + "_" + Path.GetFileName(fileData.FileName);//处理文件名,保证文件名是唯一的
            //任何类都继承至object,object里有GetHashCode(),获取(基本是唯一的,也有重复的)唯一的返回整数的哈希码
            int hash_code = new_fileName.GetHashCode();//获得哈希码
            //计算出使用该整数和二进制“1111”(就是16进制0xf)与,获取当前证书的最后4位值
            int dir1 = hash_code & 0xf;//第一次目录
            //将原始的hash——code向右移四位
            hash_code = hash_code >> 4;
            int dir2 = hash_code & 0xf;//第二层目录
            //路径拼接
            string targetFilePath = Path.Combine(context.Request.MapPath("../Upload/"), dir1.ToString(), dir2.ToString());
            //判断文件夹是否存在,不存在则创建一个此目录
            if (!Directory.Exists(targetFilePath)) {
                Directory.CreateDirectory(targetFilePath);
            }
            targetFilePath = Path.Combine(targetFilePath, new_fileName);
            fileData.SaveAs(targetFilePath);
            context.Response.Write("上传成功");
        }
    }
3.不要同aspx来处理文件上传,因为aspx有生命后期,用aspx来处理会降低性能
4.上传重名的文件,原来的文件会被覆盖
5.用guid来处理文件重名的问题

判断上传只允许图片,保证文件安全

 //获取文件后缀名,判断图片文件
            string ext = Path.GetExtension(fileData.FileName);
            if ((ext==".jpg"||ext==".jpeg"||ext==".png"||ext==".gif"||ext==".bmp"||ext==".tif")&&fileData.ContentType.ToLower().StartsWith("image"))
            {

            }

文件下载 (必须把ashx.cs删掉,代码写在ashx文件上)

< % @ WebHandler Language=”C#”
Class=”GeologyWorkManage.FileUpload.DownloadFile” % >

using System;
using System.Web;
///
/// 处理下载
///

public class DownloadFile : IHttpHandler
{

    public void ProcessRequest(HttpContext context)
    {
        context.Response.Clear();
        context.Response.ClearContent();
        context.Response.ClearHeaders();
        context.Response.ContentType = "application/octet-stream";
        string path = context.Server.MapPath(context.Request["filedir"]);
        string FileName = context.Request["filename"];
        //设置响应报文头,告诉浏览器如何处理,是一个附件,需要下载
        context.Response.AddHeader("Content-Disposition", string.Format("attachment;filename=\"{0}\"", HttpUtility.UrlEncode(FileName)));//处理中文名乱码问题
        context.Response.WriteFile(path);
        context.Response.Flush();
        context.Response.End(); 
    }

    public bool IsReusable
    {
        get
        {
            return false;
        }
    }
}

response.End()

立即结束请求,
posted on 2017-04-19 18:10  NE_STOP  阅读(1)  评论(0编辑  收藏  举报  来源