input[type=file]中使用ajaxSubmit来图片上传

  今天在使用input[type=file]上传图片到服务器时,因为项目要求,并不是像常见的通过按钮来提交表单事件,而是图片上传后就自动执行表单提交事件,将上传的图片信息传给服务器。

  刚开始我是这样执行的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        .file{
            width: 75px;
            height: 25px;
            line-height: 25px;
            text-align: center;
            background-color: green;
            position:relative;
        }
        .file input{
            width: 75px;
            height: 25px;
            opacity:0;
            filter:alpha(opacity=0);
            position:absolute;
            left:0;
            top:0;
        }
        #dd{
            display: none;
        }
    </style>
</head>
<body>
    <form action="接口的url" name="file" class="file">
        上传文件
        <input type="file" id="img" name="file">
    </form>
    <div id="dd"></div>
    <script>
        var file = document.getElementById("img");
        file.onchange = function(){
            var files = this.files;
            for(var i=0;i<files.length;i++){
                readers(files[i])
            }
        }
        function readers(fil){
            var reader = new FileReader();
            reader.readAsDataURL(fil);
            reader.onload = function(){
                form.submit();  // 文件上传后执行表单提交事件
            };
        }
    </script>
</body>
</html>

  后来发现不行,原来是form标签里缺少一句很重要的代码:enctype="multipart/form-data" 还有一个问题就是input[type=file]的name值必须为file,改好后,能将图片上传到指定服务器,但同时,新的问题产生了,那就是表单提交后,该页面会发生跳转,跳转到接口地址,这不是我想要的,我想要的是表单提交后,跳转到一个进度条页面,来展示图片处理的进度。

  于是不得不寻求新的方法,在网上看到有ajaxSubmit这种方法,这是jquery中的一种方法,使用这种方法,需要引入jquery文件以及jquery.form文件。而后就是去掉form表单中action的值,代码如下:

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<script>
    $(function(){
    $("#img").change(function(){
        var file = this.files;
        console.log(file)
            for(var i=0;i<file.length;i++){
            readFiles(file[i])
            }
    })
    function readFiles(file){
        var reader = new FileReader();
        reader.readAsDataURL(file);
        reader.onload = function(){
            $('form').ajaxSubmit({
            method:'post',
            url:'', // 上传的接口地址
            success: function(data,s, status){
            //上传成功之后的操作。跳转到新的页面,后面是需要传递的参数,这里使用了模版字符串
            window.location.href = `progress.html?key=${data.body.key}&date=${data.body.date}`
            },
                    error: function (data, status, e){
            //上传失败之后的操作
             alert("上传失败")
            
            })
            };
    }
    )}                  

 

  注意:使用ajaxSubmit方法来提交文件时,需要引入jquery文件和jquery.form文件。

 

posted @   江峰★  阅读(313)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
点击右上角即可分享
微信分享提示