Bootstrap-fileinput 多图片上传编辑

前言 :关于Bootstrap-fileinput 如何配置不做说明,自行去官网查看。网址 : http://plugins.krajee.com/file-input

逻辑说明:先从后台获取数据展示,然后进行编辑。

废话不多说, 直接上代码.

1. 页面部分代码:

<div class="form-group">
     <label for="inputEmail3" class="col-xs-3 control-label">项目LOGO</label>
     <div class="col-xs-7">
         <input id="testlogo" type="file" name="icoFile"   class="file-loading" />
         <input type="text" name="htestlogo" id="htestlogo" οnchange="addFile(this)" >
     </div>
</div>

说明: 其中onchange()为我业务需要, 上传完成后自动执行一个添加事件。 此方法可以去掉。

2. 获取初始化数据方法:

 // 初始化获取原有文件
   $(function(){
     $.ajax({
        type : "post",
        url : "/eim/project/testFileUpload.do",
        dataType : "json",
        success : function(data) {
         layer.msg('操作成功!');
         showPhotos(data);
        },
        error: function(XMLHttpRequest, textStatus, errorThrown) {
               layer.msg('操作失败!');
                    }
    });
    
   });
说明:此处我返回是一个 对象数组:List<MemberUser>,可以理解为获取一个班中所有的学生,展示头像

3.初始化bootstrap-fileinput 组件:

function showPhotos(djson){
     //后台返回json字符串转换为json对象    
     var reData = eval(djson);
     // 预览图片json数据组
     var preList = new Array();
     for ( var i = 0; i < reData.length; i++) {
		var array_element = reData[i];
		// 此处指针对.txt判断,其余自行添加
		if(array_element.fileIdFile.name.indexOf("txt")>0){
			// 非图片类型的展示
			preList[i]= "<div class='file-preview-other-frame'><div class='file-preview-other'><span class='file-icon-4x'><i class='fa fa-file-text-o text-info'></i></span></div></div>"
		}else{
			// 图片类型
			preList[i]= "<img src=\"/eim/upload/getIMG.do?savePath="+array_element.fileIdFile.filePath+"&name="+array_element.fileIdFile.name+"\" class=\"file-preview-image\">";
		}
	 }
     var previewJson = preList;
     // 与上面 预览图片json数据组 对应的config数据
     var preConfigList = new Array();
     for ( var i = 0; i < reData.length; i++) {
 		var array_element = reData[i];
 		var tjson = {caption: array_element.fileIdFile.fileName, // 展示的文件名
 					width: '120px', 
 					url: '/eim/project/deleteFile.do', // 删除url
 					key: array_element.id, // 删除是Ajax向后台传递的参数
 					extra: {id: 100}
 					};
 		preConfigList[i] = tjson;
 	 }
     // 具体参数自行查询
	 $('#testlogo').fileinput({
         uploadUrl: '/eim/upload/uploadFile.do',
         uploadAsync:true,
         showCaption: true,
    	 showUpload: true,//是否显示上传按钮
         showRemove: false,//是否显示删除按钮
         showCaption: true,//是否显示输入框
         showPreview:true, 
         showCancel:true,
         dropZoneEnabled: false,
         maxFileCount: 10,
         initialPreviewShowDelete:true,
         msgFilesTooMany: "选择上传的文件数量 超过允许的最大数值!",
         initialPreview: previewJson,
         previewFileIcon: '<i class="fa fa-file"></i>',
         allowedPreviewTypes: ['image'], 
         previewFileIconSettings: {
             'docx': '<i class="fa fa-file-word-o text-primary"></i>',
             'xlsx': '<i class="fa fa-file-excel-o text-success"></i>',
             'pptx': '<i class="fa fa-file-powerpoint-o text-danger"></i>',
             'pdf': '<i class="fa fa-file-pdf-o text-danger"></i>',
             'zip': '<i class="fa fa-file-archive-o text-muted"></i>',
             'sql': '<i class="fa fa-file-word-o text-primary"></i>',
         },
         initialPreviewConfig: preConfigList
     }).off('filepreupload').on('filepreupload', function() {
//									alert(data.url);
     }).on("fileuploaded", function(event, outData) {
     		//文件上传成功后返回的数据, 此处我只保存返回文件的id
     		var result = outData.response.id;
     		// 对应的input 赋值
     		$('#htestlogo').val(result).change();
     });
}

4. 后台java保存文件部分代码

@RequestMapping(value="/uploadFile",method=RequestMethod.POST)
	@ResponseBody
    public Object uploadFile(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//转型为MultipartHttpServletRequest
		MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest)request;
		//获取文件到map容器中
		Map<String,MultipartFile> fileMap = multipartRequest.getFileMap();
		//获取页面传递过来的路径参数
		folderPath = request.getParameter("folder");
		String rootPath = BaseConfig.uploadPath;
		String filePath = rootPath + folderPath+"/";
		//文件上传并返回map容器,map存储了文件信息
		FileModel fileModel = UploadifyUtils.uploadFiles(filePath,fileMap);
		boolean flag = service.add(fileModel);
		if(flag){
			String result = fileModel.getId()+";"+fileModel.getFilePath()+";"+fileModel.getName()+";"+fileModel.getFilePath();
			Map map = new HashMap<>();
			map.put("id", fileModel.getId());
			
			//返回文件保存ID
			//response.getWriter().write(map);
			return map;
		}
		return null;
    }
说明:该段代码为获取上传文件的部分信息, 如文件名,上传的路径 等,将文件信息保存到表中,对应对象为 FileModel 。

5.上传完成后重新刷新该组件即可。

最终展示效果 :

说明:此处指针对txt文件类型判断, 其余的doc,ppt里面有对应的展示图标,只须在判断是添加对应样式即可





附:根据路径过去/下载文件代码:

/**
     * 文件下载
     * 
     * @param savePath
     *            保存目录
     * @param name
     *            文件原名
     * @param file
     *            保存时的名称 包含后缀
     * @param request
     * @param response
     * @return
     */
    public static String down(String savePath, String name, String fileName, HttpServletRequest request,
            HttpServletResponse response) {
        try {
            String path = savePath + "/" + name;
            File file = new File(path);
            if (!file.exists()) {
                // 不存在
                request.setAttribute("name", fileName);
                return "download_error";// 返回下载文件不存在
            }
            response.setContentType("application/octet-stream");
            // 根据不同浏览器 设置response的Header
            String userAgent = request.getHeader("User-Agent").toLowerCase();

            if (userAgent.indexOf("msie") != -1) {
                // ie浏览器
                // System.out.println("ie浏览器");
                response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(name, "utf-8"));

            } else {
                response.addHeader("Content-Disposition",
                        "attachment;filename=" + new String(name.getBytes("utf-8"), "ISO8859-1"));
            }

            response.addHeader("Content-Length", "" + file.length());            
            // 以流的形式下载文件
            InputStream fis = new BufferedInputStream(new FileInputStream(path));
            byte[] buffer = new byte[fis.available()];
            fis.read(buffer);
            fis.close();
            //response.setContentType("image/*"); // 设置返回的文件类型
            OutputStream toClient = response.getOutputStream();
            OutputStream bos = new BufferedOutputStream(toClient);
            //BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(bos));
            bos.write(buffer);
            //bw.close();
            bos.close();
            toClient.close();
            return null;
        } catch (Exception e) {
            e.printStackTrace();
            //response.reset();
            return "exception";// 返回异常页面
        } finally {
           /* if (toClient != null) {
                try {
                    toClient.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }*/

        }
    }

附:

UploadifyUtils.uploadFiles 部分代码

public static FileModel uploadFiles(String savePath,Map<String,MultipartFile> fiLeMap){
		//上传文件
		//附件模型对象
		FileModel fm=new FileModel();
		try {
		    File file = new File(savePath);
		    //判断文件夹是否存在,如果不存在则创建文件夹
		    makeDir(file);
			if(fiLeMap!=null){
				for(Map.Entry<String, MultipartFile> entity:fiLeMap.entrySet()){
					MultipartFile f = entity.getValue();
					if(f!=null&&!f.isEmpty()){
						String uuid=UploadifyUtils.getUUID();//uuid作为保存时的文件名
						String ext=UploadifyUtils.getFileExt(f.getOriginalFilename());//获取文件后缀
						//保存文件
						File newFile = new File(savePath+"/"+uuid+"."+ext); 
						f.transferTo(newFile);
						fm.setFileName(f.getOriginalFilename());
						fm.setName(uuid+"."+ext);
						fm.setFilePath(savePath);//保存路径
						fm.setExt(ext);
						fm.setSize(f.getSize());
					}
				}
			}
			return fm;
			
		}catch (Exception e) {
			log.error(e);
			return null;
		}
	}

****************************************************************************************************************************************************************************

优化修改:

上面的文件下载方法有一个bug。当上传的文件名中存在特殊在字符( ,[] )时会导致无法下载。 可以改为使用spring下载代替流的方式。下面是代码:

/**
	 * @version 1.0
	 * @Title: downLoad
	 * @Description: spring下载附件
	 * @param fileId 附件id 
	 * @param HttpServletRequest
	 * @param HttpServletResponse
	 * @author qcym
	 * @date 2016年9月6日15:55:49
	 * @throws
	 */
	 @RequestMapping(value="/downLoad")
	 public ResponseEntity<byte[]> downLoad(String fileId,HttpServletRequest request,HttpServletResponse response){
		 try {
	        	// 附件id不为空
	        	if(StringUtils.isNotEmpty(fileId)){
	        	// 获取附件信息
	        	MailFile mailFile = fileDao.selectByPrimaryKey(fileId);
	        	// 获取附件真是名称
	        	String fileName = mailFile.getFileRealname();
	        	// 获取服务器上的文件
	        	String filePath = mailFile.getFileUrl()+mailFile.getFileName();
	                File file = new File(filePath);
	                
	                HttpHeaders headers = new HttpHeaders();    
	                fileName=new String(fileName.getBytes("UTF-8"),"iso-8859-1");//为了解决中文名称乱码问题  
	                headers.setContentDispositionFormData("attachment", fileName);   
	                headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);   
	                return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file),    
	                                                  headers, HttpStatus.CREATED);  
	        	}
        }catch (Exception e) {
        	e.printStackTrace();
        	throw new BusinessException("1014", "附件下载错误:"+e.getMessage());
        }
		return null;
	 }





  • 10
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 25
    评论
bootstrap-fileinput是一种基于Bootstrap框架的文件上传插件,它提供了简单易用的界面和丰富的功能。 首先,bootstrap-fileinput具有美观的样式,与Bootstrap的整体风格相匹配。它使用了一系列清晰、直观的图标和按钮,让用户可以方便地浏览、选择和上传文件。 其次,bootstrap-fileinput还支持多种文件展示方式。它可以以列表或网格的形式显示文件预览,在列表模式下可以显示文件的名称、大小、类型等信息,而在网格模式下则可以直观地展示文件的缩略图。这种多样化的展示方式可以让用户根据自己的需求选择最适合的视觉效果。 此外,bootstrap-fileinput还具有丰富的功能。它支持文件的多选和拖拽上传,可以通过设置参数来限制文件的大小、类型和数量等。它还提供了预览、删除和重新选择文件的功能,让用户可以在上传之前查看文件的内容和清理不需要的文件。此外,它还可以通过AJAX异步上传文件,实现无刷新上传的效果。 最后,bootstrap-fileinput还提供了一些额外的扩展功能。例如,它可以通过设置参数来自定义上传按钮的样式和文本,可以根据不同的需求注册和调用一系列的回调函数,以便实现更加灵活的操作。 总之,bootstrap-fileinput是一个功能强大、界面美观的文件上传插件,它可以为用户提供便捷的文件管理和上传体验。不仅仅可以用于网站开发,也可以用在各种基于Bootstrap框架的Web应用中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 25
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值