layui 的文件上传组件的使用

layui就不多介绍了,到官网网站上有详细的介绍,至于上传文件的组件的使用问题,官网上参考例子也可以实现,但是这样没有办法满足自己的项目需求,自己按照需求修改了下,希望对你有用

           需求

          layui 的文件上传组件的使用_第1张图片

           先是一个列表然后通过列表上的按钮弹出一个弹出框然后   选择上传的文件   确定的时候   提交文件  并且已提交文件可以再次打开显示在列表中,并且可以删除已提交文件

           实现思路:     

                在列表中隐藏一个input

               如下:

             

                  
			      
			      
			      
			      未上传

      点击上传的时候把隐藏input的id带过去,弹出框里面放着上传多文件的组件,且把开始上传按钮隐藏掉,点击确定的时候触发开始上传按钮  并且把准备上传文件的信息带到隐藏的input里面。

    具体代码实现如下:

    

//弹出上传附件框
function popUploadFile(id){
	var content= ""
	             +""
	             +""
	             +"
" +"
" +"
" +"" +"" +"" +"" +"" +"" +"" +"" +"
文件名大小状态操作
" +"
" +"
" +"
" +"" +"" +""; //弹出框 layer.open({ title:'上传附件', type: 1, icon:0, area:["600px","400px"], btn:["确定","取消"], btn1:function(index,layro){ //先删除要删除的已提交文件 if(deleteFilePaths){ $.ajax({ url:basePath+'deleteFile.do', data:{deleteFilePaths:deleteFilePaths}, dataType:'JSON', Type:'POST', async:false, success:function(data){ if(data.code!=0){ layer.msg(data.info); return; } //更新弹出框对应的input var deleteFilePathsArry=deleteFilePaths.split(","); var newFileJsons=new Array(); for(var i in fileJsons){ var fileData=JSON.parse(fileJsons[i]); var isDelete=false; for(var j in deleteFilePathsArry){ if(fileData.filePath==deleteFilePathsArry[j]){ isDelete=true; break; } } if(!isDelete){ var newFileJson={}; newFileJson.code=fileData.code; newFileJson.filePath=fileData.filePath; newFileJson.size=fileData.size; newFileJson.fileDir=fileData.fileDir; newFileJsons.push(newFileJson); } } //赋值给弹出框对应的input $("#"+id).val(''); for(var i in newFileJsons){ var value=JSON.stringify(newFileJsons[i]); if($("#"+id).val()==''){ $("#"+id).val(value); }else{ $("#"+id).val($("#"+id).val()+";"+value); } } }, error:function(data){ layer.msg("未知错误,请联系管理员"); return; } }); } //开始上传新的文件 if(files&&files.length!=0){ $("#testListAction").click(); }else{ if($("#"+id).val()!=''){ $("#"+id+"State").text("已上传"); }else{ $("#"+id+"State").text("未上传"); } layer.closeAll('page'); //关闭所有页面层 } }, btn2:function(index,layro){ }, closeBtn:1, content:content }); var deleteFilePaths;//删除已上传的文件路径列表 var fileDirIndex;//上传到本地的文件目录 var fileJsons;//已上传的文件基本数据 if($("#"+id).val()==''){ fileDirIndex=new Date().getTime(); }else{ fileJsons=$("#"+id).val().split(";"); fileDirIndex=JSON.parse(fileJsons[0]).fileDir; } var demoListView = $('#demoList'); var files; //加载上传文件组件 layui.use('upload', function(){ var $ = layui.jquery ,upload = layui.upload ,uploadListIns = upload.render({ elem: '#testList' ,url: basePath+'upload.do' ,data:{fileDir:fileDirIndex} ,accept: 'file' ,multiple: true ,auto: false ,bindAction: '#testListAction' ,choose: function(obj){ files= this.files = obj.pushFile(); //将每次选择的文件追加到文件队列 //读取本地文件 obj.preview(function(index, file, result){ var tr = $(['' ,''+ file.name +'' ,''+ (file.size/1024).toFixed(1) +'kb' ,'等待上传' ,'' ,'' ,'' ,'' ,''].join('')); //单个重传 tr.find('.demo-reload').on('click', function(){ obj.upload(index, file); }); //删除 tr.find('.notUpload-delete').on('click', function(){ delete files[index]; //删除对应的文件 tr.remove(); uploadListIns.config.elem.next()[0].value = ''; //清空 input file 值,以免删除后出现同名文件不可选 }); demoListView.append(tr); }); } ,allDone: function(obj){ //当文件全部被提交后,才触发 $("#"+id+"State").text("已上传"); layer.closeAll('page'); //关闭所有页面层 } ,done: function(res, index, upload){ if(res.code == 0){ //上传成功 var tr = demoListView.find('tr#upload-'+ index) ,tds = tr.children(); tds.eq(2).html('上传成功'); tds.eq(3).html(''); //清空操作 //赋值给弹出框对应的input var value=JSON.stringify(res); if($("#"+id).val()==''){ $("#"+id).val(value); }else{ $("#"+id).val($("#"+id).val()+";"+value); } return delete this.files[index]; //删除文件队列已经上传成功的文件 } this.error(index, upload); } ,error: function(index, upload){ var tr = demoListView.find('tr#upload-'+ index) ,tds = tr.children(); tds.eq(2).html('上传失败'); tds.eq(3).find('.demo-reload').removeClass('layui-hide'); //显示重传 } }); }); //添加已上传文件列表 for(var i in fileJsons){ var fileJson=JSON.parse(fileJsons[i]); var filePath=fileJson.filePath; var fileName=fileJson.filePath.split("\\")[fileJson.filePath.split("\\").length-1]; var fileSize=fileJson.size; var tr = $(['' ,''+ fileName+'' ,''+ (fileSize/1024).toFixed(1) +'kb' ,'已上传' ,'' ,'' ,'' ,'' ,''].join('')); //删除 tr.find('.upload-delete').on('click', function(){ //拼接要删除的已上传文件路径 var deleteFilePath=$(this).prev().val(); if(deleteFilePaths){ deleteFilePaths+=","+deleteFilePath; }else{ deleteFilePaths=deleteFilePath; } $(this).parent().parent().remove(); }); demoListView.append(tr); } }

后台实现代码(ssm的框架)

package com.ustcsoft.jt.controller.uploadMaterial;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.List;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

/**
 * 
 * 上传文件接口
 */
@RestController
public class UploadMaterial {
	/**
	 * 上传材料
	 * @param files
	 * @return
	 */
	@RequestMapping("/upload.do")
    public JSONObject  upload(@RequestParam("file")MultipartFile file,@RequestParam("fileDir")String fileDir){
        OutputStream os = null;
        InputStream inputStream = null;
        String fileName = null;
        String filePath=null;
        String path="D:\\file"+"\\"+fileDir;
        JSONObject resultJSON=new JSONObject();
        try {
            inputStream = file.getInputStream();
            fileName = file.getOriginalFilename();
            // 2、保存到临时文件
            // 1K的数据缓冲
            byte[] bs = new byte[1024];
            // 读取到的数据长度
            int len;
            // 输出的文件流保存到本地文件
            File tempFile = new File(path);
            if (!tempFile.exists()) {
                tempFile.mkdirs();
            }
            filePath=tempFile.getPath() + File.separator + fileName;
            os = new FileOutputStream(filePath);
            // 开始读取
            while ((len = inputStream.read(bs)) != -1) {
                os.write(bs, 0, len);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // 完毕,关闭所有链接
            try {
                os.close();
                inputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        resultJSON.put("fileDir",fileDir);
        resultJSON.put("filePath",filePath);
        resultJSON.put("size",file.getSize());
        resultJSON.put("code",0);
    	return resultJSON;
    }
	/**
	 * 根据文件路径删除文件
	 * @param deleteFilePath
	 * @return
	 */
	@RequestMapping("/deleteFile.do")
	public JSONObject deleteFile(@RequestParam("deleteFilePaths")String[] deleteFilePaths){
		JSONObject resultJSON=new JSONObject();
		JSONArray  dataArray=new JSONArray();
		try {
		for(String deleteFilePath:deleteFilePaths){
			    JSONObject fileDelete=new JSONObject();
				if(!"".equals(deleteFilePath)&&null!=deleteFilePath){
					File file=new File(deleteFilePath);
					if(file.exists()&&file.isFile()){
						//删除文件
						file.delete();
						//判断文件夹是否为空为空删除该文件夹
						File fileParent=new File(file.getParent());
						if(fileParent.isDirectory()&&fileParent.listFiles().length==0){
							fileParent.delete();
						}
						
						fileDelete.put("path",deleteFilePath);
						fileDelete.put("code",0);
						fileDelete.put("info","删除成功");
					}else{
						fileDelete.put("path",deleteFilePath);
						fileDelete.put("code", 1);
						fileDelete.put("info", "该文件不存在");
					}
					dataArray.add(fileDelete);
				 }
		}
		resultJSON.put("code",0);
		resultJSON.put("info","删除成功");
		resultJSON.put("data", dataArray);
		} catch (Exception e){
	           e.printStackTrace();
	           resultJSON.put("code", 1);
			   resultJSON.put("info",e.getMessage());
		 }
		return resultJSON;
	}
}

 

你可能感兴趣的:(web前端)