webuploader一次性上传多张图片到后台,后台如何处理

发布于 2021-11-29 05:35:56 字数 5111 浏览 780 评论 1

如题,我用webuploader上传图片,后台用springmvc,上传一张时没有问题,但一次性上传多张的时候,后台我就不知道怎么处理了,作为后台我不知道前端传来几张

这是前端页面代码

<script type="text/javascript">
    // 图片上传demo
    jQuery(function() {
    var $ = jQuery,
        $list = $('#fileList'),
        // 优化retina, 在retina下这个值是2
        ratio = window.devicePixelRatio || 1,
        // 缩略图大小
        thumbnailWidth = 100 * ratio,
        thumbnailHeight = 100 * ratio,
        // Web Uploader实例
        uploader;
    // 初始化Web Uploader
    uploader = WebUploader.create({
        // 自动上传。
        auto: true,
        // swf文件路径
        swf:'../js/Uploader.swf',
        // 文件接收服务端
        server: 'http://localhost:8080/testFileload/testup.do',
        //可上传的文件数量
        fileNumLimit: 11,
        // 内部根据当前运行是创建,可能是input元素,也可能是flash.
        pick: '#filePicker',
		
		sendAsBinary:true,
		
		fileVal:'filetoup',
		
        // 只允许选择文件,可选。
        accept: {
            title: 'Images',
            extensions: 'gif,jpg,jpeg,bmp,png',
            mimeTypes: 'image/*'
        }
    });

    // 当有文件添加进来的时候
    uploader.on( 'fileQueued', function( file ) {
        var $li = $(
                '<div id="' + file.id + '" class="file-item thumbnail">' +
                    '<img>' +
                    '<div class="info">' + file.name + '</div>' +
                '</div>'
                ),
            $img = $li.find('img');
        $list.append( $li );
        // 创建缩略图
        uploader.makeThumb( file, function( error, src ) {
            if ( error ) {
                $img.replaceWith('<span>不能预览</span>');
                return;
            }

            $img.attr( 'src', src );
        }, thumbnailWidth, thumbnailHeight );
    });

    // 文件上传过程中创建进度条实时显示。
    uploader.on( 'uploadProgress', function( file, percentage ) {
        var $li = $( '#'+file.id ),
            $percent = $li.find('.progress span');

        // 避免重复创建
        if ( !$percent.length ) {
            $percent = $('<p class="progress"><span></span></p>')
                    .appendTo( $li )
                    .find('span');
        }

        $percent.css( 'width', percentage * 100 + '%' );
    });

    // 文件上传成功,给item添加成功class, 用样式标记上传成功。
    uploader.on( 'uploadSuccess', function( file ) {
        $( '#'+file.id ).addClass('upload-state-done');
    });

    // 文件上传失败,现实上传出错。
    uploader.on( 'uploadError', function( file ) {
        var $li = $( '#'+file.id ),
            $error = $li.find('div.error');

        // 避免重复创建
        if ( !$error.length ) {
            $error = $('<div class="error"></div>').appendTo( $li );
        }

        $error.text('上传失败');
    });

    // 完成上传完了,成功或者失败,先删除进度条。
    uploader.on( 'uploadComplete', function( file ) {
        $( '#'+file.id ).find('.progress').remove();
    });
    //上传检查
    uploader.on('error', function(handler) {
		if(handler=="Q_EXCEED_NUM_LIMIT"){
			alert("超出最大张数");
		}
		if(handler=="F_DUPLICATE"){
			alert("文件重复");
		}
	});
});
    </script>
  </head>
  
  <body>
  	<div id="uploader-demo">
    	<!--用来存放item-->
    	<div id="fileList" class="uploader-list"></div>
    	<div id="filePicker">选择图片</div>
	</div>
  </body>
</html>



这是后台代码

@Controller
public class Upload {
	
	@RequestMapping("/testup.do")
	public ModelAndView testup(HttpServletRequest filetoup) throws IOException{
		FileOutputStream fos = null;
		Properties props = new Properties();
    	try {
    		//脑洞大开,用properties文件控制循环次数,这不重要,可忽略
			props.load(DirMaker.class.getClassLoader().getResourceAsStream("config.properties"));
		} catch (IOException e) {
			e.printStackTrace();
		}
    	//为了存放新建的file
    	List<File> list = new ArrayList<File>();
    	List<String> listPicPath = new ArrayList<String>();
//    	Integer.parseInt(props.getProperty("createPicNum"))
		try {
			for (int i = 0; i <11; i++) {
				//上传的图片的命名有规范,所以这里是日期加UUID,这也不不是问题关键,忽略
				File f = new File("/" + DirMaker.refFormatNowDate() + "/"
						+ DirMaker.refFormatNowDate()
						+ UUID.randomUUID().toString().replaceAll("-", "")
						+ ".jpg");
				list.add(f);
				fos = new FileOutputStream(list.get(i));
				//这里封装了输入流转化为byte的方法
				byte[] data = ToByte.toByteArray(filetoup.getInputStream());
				fos.write(data);
				fos.flush();
				//为了把每个上传的图片的路径放到list里面
				listPicPath.add(list.get(i).getAbsolutePath());
			}
		} catch (Exception e) {
		} finally {
			if (fos != null) {
				try {
					fos.close();
				} catch (Exception e2) {
					e2.printStackTrace();
				}
			}
		}
		ModelAndView mav = new ModelAndView("success");
		//需要返回图片的路径给前端
		mav.addObject("backdata", listPicPath);
		return mav;
	}
}



单张图片我这里完全可以解决,也能运行成功,多张的时候只保存了最后那张上传的,其他都没存到,困扰我的是我如何知道webuploader传到后台有几张图片呢,后台怎么处理webuploader一次性上传的多张图片。刚学这方面,很多地方不是特别懂,望各位大牛海涵,小弟在此谢谢各位大牛了

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

断爱 2021-11-30 21:21:13

如果你前端的名字都是一样的,直接参数用
CommonsMultipartFile[]

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文