通过表单Form提交来上传文件的方式这里就不说了;

下面介绍,通过js中使用ajax异步上传图片文件: 新建一个html页面和一个一般处理程序即可;

涉及思路:

//发送2次Ajax请求完成js异步上传文件的操作:
          //第1次,post 只上传文件,返回文件名name
          //第2次,get 根据文件名name定位服务器上的文件,同时根据浏览器传过来的realname重命名服务器上的文件
          //(如果有其他参数,也可以通过第2次一并上传)

图片文件已测试没有问题;其他文件带测试;

代码如下:

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

    <title></title>

    <script type="text/javascript">

 

        function upload() {

             

            var file1 = document.getElementById("file1");

 

            postFile(file1.files[0]);

            //if (window.ActiveXObject) { // 判断是否支持ActiveX控件

            //    var fso = new window.ActiveXObject("Scripting.FileSystemObject");

            //    //var f1 = fso.GetFile(path); //"c://test1.txt");

            //    //var ts = f1.OpenAsTextStream(2, true); //文本流

            //   // var ts = file1.files[0].OpenAsTextStream(2, true); //文本流

 

            //   postFile(file1.files[0]);

            //    //    postFile(frm);

            //} else {

            //    alert("不支持js上传文件!");

            //}

            //test();

        }

        //function test() {

        //    var pnsys = new ActiveXObject("WScript.shell");

        //    pn = pnsys.Environment("PROCESS");

        //    alert(pn("WINDIR"));

        //}

 

        function postFile(data) {

            //1.创建异步对象(小浏览器)

            var req = new XMLHttpRequest();

 

            //2.设置参数

            req.open("post", "C02FileUploadsByJs.ashx", true);

 

            //3.设置 请求 报文体 的 编码格式(设置为 表单默认编码格式)

            req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

            // req.setRequestHeader("")

            //4.设置回调函数

            req.onreadystatechange = function () {

                //请求状态readyState=4准备就绪,服务器返回的状态码status=200接收成功

                if (req.readyState == 4 && req.status == 200) {

 

                    if (req.responseText != "上传出错!") {

                        changeName(req.responseText);

                    }

                }

            };

 

            //4.发送异步请求

            req.send(data);//post传参在此处

        }

 

        function changeName(name) {

            var file1 = document.getElementById("file1");

            var realname = file1.value;

 

            var req = new XMLHttpRequest();

 

            //如果名称遇到中文,请在此处转码,然后放入url中

            req.open("get", "C02FileUploadsByJs.ashx?name=" + name + "&realname=" + realname, true);

 

            req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

 

            req.onreadystatechange = function () {

                //请求状态readyState=4准备就绪,服务器返回的状态码status=200接收成功

                if (req.readyState == 4 && req.status == 200) {

                    document.getElementById("sp").innerHTML = req.responseText + "<br/>" + realname;

                }

            };

 

            //4.发送异步请求

            req.send();

        }

 

    </script>

</head>

<body>

    <!--<form id="frm" method="POST" enctype="multipart/form-data" action="FileUploads.ashx">-->

    <form id="frm">

 

        选择要上传的文件:

        <input type="file" name="file1" id="file1" />

        <br />

 

        如果上传的图片,则可以选择如下操作:

        <input type="checkbox" name="chk" value="font" />加文字

        <input type="checkbox" name="chk" value="image" />加图片水印

        <input type="checkbox" name="chk" value="thumbnail" />同时生成缩略图

 

        <!--<input type="submit" value="提交" />-->

        <input type="button" value="提交" onclick="upload();" />

        <br />

        <span id="sp"></span>

    </form>

</body>

</html>

using System;

using System.Collections.Generic;

using System.IO;

using System.Linq;

using System.Web;

 

namespace C05_Upload

{

    /// <summary>

    /// FileUploadsByJs 的摘要说明

    /// </summary>

    public class C02FileUploadsByJs : IHttpHandler

    {

        public void ProcessRequest(HttpContext context)

        {

            context.Response.ContentType = "text/plain";

            //发送2次请求完成js异步上传文件的操作:

            //第1次,post 只上传文件,返回文件名name

            //第2次,get 根据文件名name定位服务器上的文件,同时根据浏览器传过来的realname重命名服务器上的文件

 

            if (context.Request.HttpMethod.ToLower() == "get")

            {

                try

                {

                    //根据传过来的名称找到服务器上的该文件,并按照realname来重命名

                    string name = context.Request.Params["name"];

                    string realname = context.Request.Params["realname"];

 

                    //去掉路径

                    if (realname.LastIndexOf('\\') > -1)

                        realname = realname.Substring(realname.LastIndexOf('\\') + 1);

 

                    string path = context.Server.MapPath("/uploads/" + name);

                    string pathNew = context.Server.MapPath("/uploads/" + realname);

                    if (File.Exists(path))

                    {

                        File.Copy(path, pathNew, false);

                        File.Delete(path);

                    }

                    context.Response.Write("上传成功!");

                }

                catch (Exception ex)

                {

                    context.Response.Write("上传出错!");

                }

            }

            else//post

            {

                try

                {

                    Stream s = new BufferedStream(context.Request.InputStream);

                    byte[] bytes = new byte[s.Length];

                    s.Read(bytes, 0, bytes.Length);

 

                    string name = Guid.NewGuid().ToString();

                    string path = context.Server.MapPath("/uploads/" + name);

                    File.WriteAllBytes(path, bytes);

 

                    context.Response.Write(name); //"上传成功!");

                }

                catch (Exception ex)

                {

                    context.Response.Write("上传出错!");

                }

            }

            context.Response.End();

        }

 

        public bool IsReusable

        {

            get

            {

                return false;

            }

        }

    }

}

[Ajax] 使用Ajax异步上传图片文件(非Form表单提交)的更多相关文章

  1. 非form表单提交的数据就要用@requestbody注解获取http传过来的值,尤其json

    非form表单提交的数据就要用@requestbody注解获取http传过来的值,尤其json

  2. Flask基础之返回值与form表单提交

    目录 1.Python 现阶段三大主流Web框架 Django Tornado Flask 对比 2.Flask的安装 3.Flask的第一个简单应用 4.Flask中的render_template ...

  3. ajax form表单提交 input file中的文件

    ajax form表单提交 input file中的文件 现今的主流浏览器由于ajax提交form表单无法把文件类型数据提交到后台,供后台处理,可是开发中由于某些原因又不得不用ajax提交文件, 为了 ...

  4. form表单提交与ajax消息传递

    form表单提交与ajax消息传递 1.前后端传输数据编码格式contentType: urlencoded 对应的数据格式:name=xxx&password=666 后端获取数据:requ ...

  5. Form表单提交,Ajax请求,$http请求的区别

    做过前端同学想必都避免不了要和后台server打交道.而以下这三种与后台交互的方式想必大家都不陌生. Form表单提交,Ajax请求,Angular的$http请求 以前一直搞不清楚什么时候应该用哪种 ...

  6. python中前后端通信方法Ajax和ORM映射(form表单提交)

    后端从数据库获取数据给到前端: 第一种方式: admin.py文件代码: @admin.route('/showList') def show(): # 获取数据库所有文章数据,得到一个个对象 res ...

  7. form表单提交转为ajax方式提交

    <form action="xxx" method="get"> //action的值是请求的url地址 <div class="f ...

  8. form表单提交没有跨域问题,但ajax提交存在跨域问题

    浏览器的策略本质是:一个域名下面的JS,没有经过允许是不能读取另外一个域名的内容,但是浏览器不阻止你向另外一个域名发送请求. 所以form表单提交没有跨域问题,提交form表单到另外一个域名,原来页面 ...

  9. Checkbox框全选操作,form表单提交与jquery ajax提交两种处理方式

    //1.jquery ajax<script type="text/javascript"> $(function(){ var basePath = $(" ...

随机推荐

  1. Form_通过Custom.pll新增菜单项(案例)

    2014-05-31 Created By BaoXinjian

  2. Codeforces Round #365 (Div. 2) Chris and Road

    Chris and Road 题意: 给一个n个顶点的多边形的车,有速度v,人从0走到对面的w,人速度u,问人最快到w的时间是多少,车如果挡到人,人就不能走. 题解: 这题当时以为计算几何,所以就没做 ...

  3. 安装java开发环境jdk,安装JDK

    JDK可以理解为翻译官,它将Java高级语言翻译为二进制执行. JDK可以编译文件,编译后的文件扩展名为.class. 只要能支持JDK的地方,JAVA就可以运行,这就是JAVA跨平台的性质. 我的是 ...

  4. ruby-rails 环境搭建

    https://ruby-china.org/wiki/install_ruby_guide

  5. 文件下载(只需要简单的四步),Java中都通用

    我们就直接切入主题啦,文件下载只需要四步: 1.设置文件ContentType类型 2.设置文件头 3.通过response获取ServletOutputStream对象(out) 4.写到输出流(o ...

  6. C开源hash项目uthash

    uthash 是C的比较优秀的开源代码,它实现了常见的hash操作函数,例如查找.插入.删除等.该套开源代码采用宏的方式实现hash函数的相关功能,支持C语言的任意数据结构最为key值,甚至可以采用多 ...

  7. SQL Server 2005中的分区表(五):添加一个分区(转)

    所谓天下大事,分久必合,合久必分,对于分区表而言也一样.前面我们介绍过如何删除(合并)分区表中的一个分区,下面我们介绍一下如何为分区表添加一个分区. 为分区表添加一个分区,这种情况是时常会 发生的.比 ...

  8. redis在windows上的安装

    1.下载地址:https://github.com/MSOpenTech/redis 主要支持win64的,有个msi文件可以直接安装,安装后redis会变成一个服务,对于windows来说这种最方便 ...

  9. 《一课经济学》书摘笔记III

    基本谬论:世界上可做的工作是有限的.用更有效率的方式去做事,只会消减工作机会.这个信条换句话说就是,采用低效率的方式去做一件事,反而可以创造工作机会. 只要还有人的需要或愿望还没有获得满足,能做的事就 ...

  10. [ActionScript 3.0] AS3.0 调试出现安全沙箱冲突错误解决办法

    提示 *** 安全沙箱冲突 ***到 http://api.map.baidu.com/telematics/v3/weather?location=%E6%88%90%E9%83%BD&ou ...