一.表单上传:

html客户端部分:

  1. <form action="upload.ashx" method="post" enctype="multipart/form-data">
  2. 选择文件:<input type="file" name="file1" /><br />
  3. <input type="submit" value="上传" />
  4. </form>

一般处理程序服务器端:

  1. public void ProcessRequest(HttpContext context)
  2. {
  3. context.Response.ContentType = "text/plain";
  4. HttpPostedFile file1 = context.Request.Files["file1"];
  5. helper.uploadFile(file1, "~/upload/");//这里就是对相应方法进行调用
  6. context.Response.Write("ok");//提示执行成功
  7. }

上传代码的封装:

  1. /// <summary>
  2. /// 上传图片
  3. /// </summary>
  4. /// <param name="file">通过form表达提交的文件</param>
  5. /// <param name="virpath">文件要保存的虚拟路径</param>
  6. public static void uploadImg(HttpPostedFile file,string virpath)
  7. {
  8. if (file.ContentLength > 1024 * 1024 * 4)
  9. {
  10. throw new Exception("文件不能大于4M");
  11. }
  12. string imgtype = Path.GetExtension(file.FileName);
  13. if(imgtype!=".jpg"&&imgtype!=".jpeg") //图片类型进行限制
  14. {
  15. throw new Exception("请上传jpg或JPEG图片");
  16. }
  17. using (Image img = Bitmap.FromStream(file.InputStream))
  18. {
  19. string savepath = HttpContext.Current.Server.MapPath(virpath+file.FileName);
  20. img.Save(savepath);
  21. }
  22. }
  23. /// <summary>
  24. /// 上传文件
  25. /// </summary>
  26. /// <param name="file">通过form表达提交的文件</param>
  27. /// <param name="virpath">文件要保存的虚拟路径</param>
  28. public static void uploadFile(HttpPostedFile file, string virpath)
  29. {
  30. if (file.ContentLength > 1024 * 1024 * 6)
  31. {
  32. throw new Exception("文件不能大于6M");
  33. }
  34. string imgtype = Path.GetExtension(file.FileName);
  35. //imgtype对上传的文件进行限制
  36. if (imgtype != ".zip" && imgtype != ".mp3")
  37. {
  38. throw new Exception("只允许上传zip、rar....文件");
  39. }
  40. string dirFullPath= HttpContext.Current.Server.MapPath(virpath);
  41. if (!Directory.Exists(dirFullPath))//如果文件夹不存在,则先创建文件夹
  42. {
  43. Directory.CreateDirectory(dirFullPath);
  44. }
  45. file.SaveAs(dirFullPath + file.FileName);
  46. }

二.Ajax文件异步上传:

注明:既然有了表单上传为什么又要ajax上传呢?因为表单上传过程中,整个页面就刷新了!ajax异步上传就可以达到只刷新局部位置,下面就简单看看ajax上传吧!

html客户端部分:

  1. <head>
  2. <script src="jquery-2.1.4.js"></script>
  3. <script>
  4. $(function () {
  5. $("#upload").click(function () {
  6. $("#imgWait").show();
  7. var formData = new FormData();
  8. formData.append("myfile", document.getElementById("file1").files[0]);
  9. $.ajax({
  10. url: "upload.ashx",
  11. type: "POST",
  12. data: formData,
  13. /**
  14. *必须false才会自动加上正确的Content-Type
  15. */
  16. contentType: false,
  17. /**
  18. * 必须false才会避开jQuery对 formdata 的默认处理
  19. * XMLHttpRequest会对 formdata 进行正确的处理
  20. */
  21. processData: false,
  22. success: function (data) {
  23. if (data.status == "true") {
  24. alert("上传成功!");
  25. }
  26. if (data.status == "error") {
  27. alert(data.msg);
  28. }
  29. $("#imgWait").hide();
  30. },
  31. error: function () {
  32. alert("上传失败!");
  33. $("#imgWait").hide();
  34. }
  35. });
  36. });
  37. });
  38. </script>
  39. </head>
  40. <body>
  41. 选择文件:<input type="file" id="file1" /><br />
  42. <input type="button" id="upload" value="上传" />
  43. <img src="wait.gif" style="display:none" id="imgWait" />
  44. </body>

一般处理程序服务器端:

  1. public void ProcessRequest(HttpContext context)
  2. {
  3. context.Response.ContentType = "text/html";
  4. if (context.Request.Files.Count > 0)
  5. {
  6. HttpPostedFile file1 = context.Request.Files["myfile"];
  7. helper.uploadFile(file1, "~/upload/"); //这里引用的是上面封装的方法
  8. WriteJson(context.Response, "true", "");
  9. }
  10. else
  11. {
  12. WriteJson(context.Response, "error", "请选择要上传的文件");
  13. }
  14. }

json代码封装:

  1. public static void WriteJson(HttpResponse response,
  2. string status1, string msg1, object data1 = null)
  3. {
  4. response.ContentType = "application/json";
  5. var obj = new { status = status1, msg = msg1, data = data1 };
  6. string json = new JavaScriptSerializer().Serialize(obj);
  7. response.Write(json);
  8. }

普通文件的上传(表单上传和ajax文件异步上传)的更多相关文章

  1. 【Flask】 结合wtforms的文件上传表单

    表单中的文件上传 基本的表单渲染,表单类设置等等就不多说了,参看另一个文章即可.但是那篇文章里没有提到对于FileField,也就是上传文件的表单字段是如何处理,后端又是如何实现接受上传过来的文件的. ...

  2. 上传漏洞科普[1]-文件上传表单是Web安全主要威胁

    为了让最终用户将文件上传到您的网站,就像是给危及您的服务器的恶意用户打开了另一扇门.即便如此,在今天的现代互联网的Web应用程序,它是一种 常见的要求,因为它有助于提高您的业务效率.在Facebook ...

  3. ajax上传表单的俩种方式

    1.用h5对象上传表单(图片) var formData = new FormData(); formData.append("authenticity_token", '1212 ...

  4. bootstrap上传表单的时候上传的数据默认是0 一定要小心

    bootstrap上传表单的时候上传的数据默认是0 一定要小心

  5. MVC 5.0(or5.0↓) Ajax.BeginForm 异步上传附件问题,答案是不能的!

    MVC 5.0(or5.0↓)  Ajax.BeginForm 异步上传附件问题,答案是不能的! (请注意我这里说的异步!) 来看一下下面这段一步提交file的代码 //前台 .cshtml 文件 & ...

  6. servle 3.0 新特性之一 对上传表单的支持

    1. 上传 * 上传对表单的要求: > method="post" > enctype="multipart/form-data",它的默认值是:a ...

  7. Django框架之第二篇--app注册、静态文件配置、form表单提交、pycharm连接数据库、django使用mysql数据库、表字段的增删改查、表数据的增删改查

    本节知识点大致为:静态文件配置.form表单提交数据后端如何获取.request方法.pycharm连接数据库,django使用mysql数据库.表字段的增删改查.表数据的增删改查 一.创建app,创 ...

  8. 移动端图片上传解决方案localResizeIMG先压缩后ajax无刷新上传

    现在科技太发达,移动设备像素越来越高,随便一张照片2M+,但是要做移动端图片上传和pc上略有不同,移动端你不能去限制图片大小,让用户先处理图片再上传,这样不现实.所以理解的解决方案就是在上传先进行图片 ...

  9. Django---静态文件配置,post提交表单的csrf问题(日后细说),创建app子项目和分析其目录,ORM对象关系映射简介,Django操作orm(重点)

    Django---静态文件配置,post提交表单的csrf问题(日后细说),创建app子项目和分析其目录,ORM对象关系映射简介,Django操作orm(重点) 一丶Django的静态文件配置 #we ...

  10. 原生js封装ajax:传json,str,excel文件上传表单提交

    由于项目中需要在提交ajax前设置header信息,jquery的ajax实现不了,我们自己封装几个常用的ajax方法. jQuery的ajax普通封装 var ajaxFn = function(u ...

随机推荐

  1. windows安装mongodb服务简洁版教程

    根据网上安装教程,简单总结如下: 1.去mongodb官网下载电脑系统对应版本的软件,比如我的是windows 64位的,就选择64位的,可能下载下来之后文件夹上面显示的是win32,这个不用理会: ...

  2. python利用opencv合成模糊图像

    之前需要评估图像质量来筛选成像质量不错的图片,去除由于对焦,运动等造成的模糊图像,所以在构建数据集的时候考虑用opencv对清晰的图片进行处理获得模糊的图片从而进行训练. 1) 运动模糊图像 一般来说 ...

  3. 解决Postgres无法连接的问题

    错误信息如下: could not connect to server: Connection refused Is the server running on host host.domain.co ...

  4. go异常处理原则

    如果你定义的函数有可能失败,它就应该返回一个错误.当我调用其他package的函数时,如果这个函数实现的很好,我不需要担心它会panic,除非有真正的异常情况发生,即使那样也不应该是我去处理它.而pa ...

  5. dir 命令手册

    dir 命令手册 参数 /A D 目录 R 只读文件 H 隐藏文件 A 准备存档的文件 S 系统文件 - 表示"否"的前缀 /B 使用空格式(没有标题信息或摘要) /C 在文件大小 ...

  6. 微信企业号-根据code获取成员信息(过期code)

    二次请求获取成员信息时,会报如下错误: { "errcode": "40029", "errmsg": "invalid code ...

  7. Educational Codeforces Round 2

    600A - Extract Numbers    20171106 字符串处理题,稍微注意点细节就能水过 #include<stdlib.h> #include<stdio.h&g ...

  8. Linux 的基本操作(系统用户及用户组的管理)

    [认识/etc/passwd和/etc/shadow] 这两个文件可以说是linux系统中最重要的文件之一.如果没有这两个文件或者这两个文件出问题,则你是无法正常登录linux系统的. /etc/pa ...

  9. C++ main函数的参数

    C++的main函数可以没有输入参数,也可以有输入参数,而且只能有两个参数,习惯上coding如下: int main(int argc, char* argv[]) 或者 int main(int ...

  10. java爬取网站信息和url实例

    https://blog.csdn.net/weixin_38409425/article/details/78616688(出自此為博主) 具體代碼如下: import java.io.Buffer ...