批量上传图片(jQuery-File-Upload使用)

jQuery-File-Upload

jQuery-File-Upload是一个jquery下的ajax文件上传插件,支持批量上传,github地址:https://github.com/blueimp/jQuery-File-Upload。

官方有个基本的使用教程,如果没有特别需求可以参考这个简单使用

https://github.com/blueimp/jQuery-File-Upload/wiki/Basic-plugin

官方的demo地址,感兴趣可以对照源码分析下,demo分别对应源码basic-plus.html,basic.html等文件
https://blueimp.github.io/jQuery-File-Upload/

批量上传图片

需要引入的css和js文件

<link rel="stylesheet" href="{{asset('js/jquery-fileupload/css/jquery.fileupload.css')}}">
<link rel="stylesheet" href="{{asset('js/jquery-fileupload/css/jquery.fileupload-ui.css')}}">
<script type="text/javascript" src="{{asset('js/jquery-fileupload/js/jquery.ui.widget.js')}}"></script>
<script type="text/javascript" src="{{asset('js/jquery-fileupload/js/jquery.fileupload.js')}}"></script>
<script type="text/javascript" src="{{asset('js/jquery-fileupload/js/jquery.iframe-transport.js')}}"></script>

下载地址 https://github.com/blueimp/jQuery-File-Upload/releases ,下载后解压,将上面需要的文件放入项目相应目录。

html代码

<meta name="csrf-token" content="{{ csrf_token() }}">  
<form id="submit_form" action="{{route('work.store')}}" method="post">
    {{csrf_field()}}
    <table class="add_tab">
        <tbody>
        <tr>
            <th>图片:<a id="start"></a></th>
            <td>
                <input id="fileupload" type="file" name="files[]" data-url="{{route('batch-upload', ['works'])}}" multiple>
                <input id="file_path" type="hidden" name="file_path">
            </td>
        </tr>
        <tr>
            <th></th>
            <td>
                <div>
                    <div id="progress" style="width:50%;float:left">
                        <div class="bar" style="width: 0%;height:18px;background:green;"></div>
                    </div>
                    <div id="upload_finish" style="display:none;float:left;margin-left:15px;height:18px;line-height:18px;">上传完成</div>
                </div>
                <div style="clear:both"></div>
                <div id = "upload_list">
                </div>
            </td>
        </tr>
        <tr>
            <th></th>
            <td>
                <input type="submit" value="提交">
                <input type="button" class="back" onclick="history.go(-1)" value="返回">
            </td>
        </tr>
        </tbody>
    </table>
</form>

实现的js代码

        $(function () {
            $('#fileupload').fileupload({
                dataType: 'json',
                singleFileUploads: false,
                beforeSend: function(xhr) {
                    $('#upload_finish').hide();
                    $('#progress .bar').css(
                        'width',
                        '0%'
                    );
                    xhr.setRequestHeader("X-CSRF-TOKEN", $('meta[name="csrf-token"]').attr('content'));
                },
                progressall: function (e, data) {
                    var progress = parseInt(data.loaded / data.total * 100, 10);
                    $('#progress .bar').css(
                        'width',
                        progress + '%'
                    );
                    if (progress == 100) {
                        $('#upload_finish').show();
                    }
                },
                done: function (e, data) {
                    var files = data.result.data
                    for (i in files) {
                        $('#upload_list').append('<img src="' + files[i]+ '" alt="" style="max-width: 350px; max-height:100px;margin:5px;">');
                    }
                    $('#file_path').val(files);
                }
            });
        });

laravel后台处理

Route::post('batch-upload/{dir_name}', '[email protected]')->name('batch-upload');
    public function batchUpload(Request $request, $dir_name)
    {
        try{
            $file_path = [];
            if($request->hasFile('files')){
                $files = $request->file('files');
                foreach ($files as $file) {
                    $entension = $file->getClientOriginalExtension();
                    $new_name = date('YmdHis').mt_rand(10000,99999).'.'.$entension;
                    $file_dir = public_path().'/uploads/'.$dir_name;
                    $file->move($file_dir,$new_name);
                    $file_path[] = '/uploads/'.$dir_name.'/'.$new_name;
                }
            }   

            return $this->success($file_path);;
        }catch(\Exception $e){
            return $this->error('文件上传失败,请刷新后重试');
        }
    }

注意:

  • 1、ajax调用的时候需要考虑csrf问题,

html中加入头信息

<meta name="csrf-token" content="{{ csrf_token() }}">    
beforeSend: function(xhr) {
    xhr.setRequestHeader("X-CSRF-TOKEN", $('meta[name="csrf-token"]').attr('content'));
},
  • 2、一次上传多个文件,而不是循环调用

singleFileUploads: false,

上面配置是为了一次上传多个文件,否则的话是当你传入多个文件的时候会循环调用你的后台上传api。并且我在跑官方文档的时候发现,一次上传n个图片,会触发n次add回调,并且每次回掉获取data.files对象都是所有的n个文件,想要单独处理每个文件很麻烦,所以我直接每次自动上传,并且都是上传所有选中的文件。

上传完成后效果

原文地址:https://www.cnblogs.com/redirect/p/10066548.html

时间: 2024-10-10 17:19:40

批量上传图片(jQuery-File-Upload使用)的相关文章

jQuery File Upload

jQuery File Upload 需求 有这么一个需求,一个form有多个文件要上传,但又不是传统的图片批量上传那种,是类似下图这种需求,一开始是用的swfupload做的上传,但是问题是如果有多个按钮的话,就要写很多重复的代码,于为了代码的简洁所以就开始寻求其他的方法,期间试过uploadify,但是由于样式始终调不出来,最后就放弃了,直到发现这么个小巧的玩意,jQuery File Upload. 本文包含了upload的js实现,html的分析,css的实现等内容,文章末尾有git地址

用jQuery File Upload做的上传控件demo,支持同页面多个上传按钮

需求 有这么一个需求,一个form有多个文件要上传,但又不是传统的图片批量上传那种,是类似下图这种需求,一开始是用的swfupload做的上传,但是问题是如果有多个按钮的话,就要写很多重复的代码,于为了代码的简洁所以就开始寻求其他的方法,期间试过uploadify,但是由于样式始终调不出来,最后就放弃了,直到发现这么个小巧的玩意,jQuery File Upload. 本文包含了upload的js实现,html的分析,css的实现等内容,文章末尾有git地址 最简运行时 官网下载的demo有N多

jQuery File Upload 单页面多实例的实现

jQuery File Upload 的 GitHub 地址:https://github.com/blueimp/jQuery-File-Upload 插件描述:jQuery File Upload 是一个 jQuery 图片上传组件,支持多文件上传.取消.删除,上传前缩略图预览.列表显示图片大小,支持上传进度条显示.插件基于开放的标准,如 HTML5 和 JavaScript ,不需要额外的浏览器插件(例如使用Adobe 的 Flash ),在旧版浏览器中使用 XMLHttpRequest

jQuery File Upload文件上传插件使用

jQuery File Upload 是一个Jquery文件上传组件,支持多文件上传.取消.删除,上传前缩略图预览.列表显示图片大小,支持上传进度条显示:支持各种动态语言开发的服务器端.官网链接:https://github.com/blueimp/jQuery-File-Upload/wiki 特点:拖放支持:上传进度条:图像预览:可定制和可扩展的:兼容任何服务器端应用平台(PHP, Python, Ruby on Rails, Java, Node.js, Go etc.). 使用方法: 1

jquery file upload 文件上传插件

1. jquery file upload 下载 jquery file upload Demo 地址:https://blueimp.github.io/jQuery-File-Upload/ jquery file upload 下载 地址:https://github.com/blueimp/jQuery-File-Upload/tags jquery file upload API 地址:https://github.com/blueimp/jQuery-File-Upload/wiki

jquery File upload使用总结

1. jquery file upload 下载 jquery file upload Demo 地址:https://blueimp.github.io/jQuery-File-Upload/ jquery file upload 下载   地址:https://github.com/blueimp/jQuery-File-Upload/tags jquery file upload API    地址:https://github.com/blueimp/jQuery-File-Upload

jQuery File Upload 图片上传解决方案兼容IE6+

1.下载:https://github.com/blueimp/jQuery-File-Upload 2.命令: npm install bower install ====================== 3.修改basic.html 如下: 1.cdn 静态引用修改 2.ajax提交路径修改 ====&&& 其他demo页面修改同理 =======: 下面修改完了以后.如下所示: <!DOCTYPE HTML><!--/* * jQuery File Up

jQuery File Upload跨域上传

最近在做一个一手粮互联网项目,方案为前后端分离,自己负责前端框架,采用了Requirejs+avalonjs+jquery三个框架完成. 前后端通过跨域实现接口调用,中间也发现了不少问题,尤其是在富文本编辑器和上传插件跨域的处理过程中,费劲了脑汁,总算解决了. 上传选择了jQuery File Upload,兼容性还是相对不错,并且支持跨域,但是没有一个完整的跨域Demo,只能看源码找帮助. 下载地址:https://github.com/blueimp/jQuery-File-Upload 页

jquery file upload 后台收到的文件名中文乱码, filename中文乱码

本周用jquery file upload做上传文件的功能,后台会接受文件,并且截取文件名作为字符存入数据库.基本功能实现时候,试了几个文件,发现如果文件名如果没有中文就OK,如果文件名带中文的话,后台收到的就是中文乱码,怎么去解码都没用. 例如,上传的文件叫做"昕锐配置表.xls",但是到后台收到的却是 "鏄曢攼閰嶇疆琛?xls" ,如下图: 似乎也不是解码能解决的问题. 于是乎想弄清楚这个文件名是在哪个环节出问题的.首先写了一个最简单的html页面,里面就是最原

Spring-boot之jQuery File Upload后台配置方法

文件上传在Spring-boot中本身配置起来非常简单,但是有个多文件传递和单个传递的问题. 两者配置是略有不同的,而且还有一些让我这个技术小白很容易踩坑的地方. 重要的几点: 上传的是单个文件:  MultipartFile file 上传的是多个文件: MultipartFile[] file 先从单个文件上传 后台配置来说: public Map uploadFile(@RequestParam("file") MultipartFile file,HttpServletRequ