精华内容
下载资源
问答
  • SpringBoot文件上传下载和多文件上传(图文详解)

    万次阅读 多人点赞 2017-01-16 20:16:02
    最近在学习SpringBoot,以下是最近学习整理的实现文件上传下载的java代码: 1、开发环境: IDEA15+ Maven+JDK1.8 2、新建一个maven工程: 3、工程框架 4、pom.xml文件依赖项...

    本人微信公众号:CPP进阶之旅
    如果觉得这篇文章对您有帮助,欢迎关注 “CPP进阶之旅” 学习更多技术干货

    最近在学习SpringBoot,以下是最近学习整理的实现文件上传下载的java代码:
    1、开发环境:
    IDEA15+ Maven+JDK1.8
    2、新建一个maven工程:
    这里写图片描述
    3、工程框架
    这里写图片描述
    4、pom.xml文件依赖项

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
      <modelVersion>4.0.0</modelVersion>
      <groupId>SpringWebContent</groupId>
      <artifactId>SpringWebContent</artifactId>
      <packaging>war</packaging>
      <version>1.0-SNAPSHOT</version>
      <name>SpringWebContent Maven Webapp</name>
      <url>http://maven.apache.org</url>
      <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.4.3.RELEASE</version>
      </parent>
      <dependencies>
        <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-devtools</artifactId>
          <optional>true</optional>
        </dependency>
        <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>3.8.1</version>
          <scope>test</scope>
        </dependency>
      </dependencies>
      <properties>
        <java.version>1.8</java.version>
      </properties>
      <build>
        <finalName>SpringWebContent</finalName>
      <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
      </plugin>
    </plugins>
      </build>
    </project>
    

    5、Application.java

    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    @SpringBootApplication
    public class Application {
    
        public static void main(String[] args) {
            SpringApplication.run(Application.class, args);
        }
    }
    

    6、FileController.java

    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.web.bind.annotation.ResponseBody;
    import org.springframework.web.multipart.MultipartFile;
    import org.springframework.web.multipart.MultipartHttpServletRequest;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.*;
    import java.util.List;
    
    @Controller
    public class FileController {
        @RequestMapping("/greeting")
        public String greeting(@RequestParam(value="name", required=false, defaultValue="World") String name, Model model) {
            model.addAttribute("name", name);
            return "greeting";
        }
        private static final Logger logger = LoggerFactory.getLogger(FileController.class);
        //文件上传相关代码
        @RequestMapping(value = "upload")
        @ResponseBody
        public String upload(@RequestParam("test") MultipartFile file) {
            if (file.isEmpty()) {
                return "文件为空";
            }
            // 获取文件名
            String fileName = file.getOriginalFilename();
            logger.info("上传的文件名为:" + fileName);
            // 获取文件的后缀名
            String suffixName = fileName.substring(fileName.lastIndexOf("."));
            logger.info("上传的后缀名为:" + suffixName);
            // 文件上传后的路径
            String filePath = "E://test//";
            // 解决中文问题,liunx下中文路径,图片显示问题
            // fileName = UUID.randomUUID() + suffixName;
            File dest = new File(filePath + fileName);
            // 检测是否存在目录
            if (!dest.getParentFile().exists()) {
                dest.getParentFile().mkdirs();
            }
            try {
                file.transferTo(dest);
                return "上传成功";
            } catch (IllegalStateException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return "上传失败";
        }
    
        //文件下载相关代码
        @RequestMapping("/download")
        public String downloadFile(org.apache.catalina.servlet4preview.http.HttpServletRequest request, HttpServletResponse response){
            String fileName = "FileUploadTests.java";
            if (fileName != null) {
                //当前是从该工程的WEB-INF//File//下获取文件(该目录可以在下面一行代码配置)然后下载到C:\\users\\downloads即本机的默认下载的目录
                String realPath = request.getServletContext().getRealPath(
                        "//WEB-INF//");
                File file = new File(realPath, fileName);
                if (file.exists()) {
                    response.setContentType("application/force-download");// 设置强制下载不打开
                    response.addHeader("Content-Disposition",
                            "attachment;fileName=" +  fileName);// 设置文件名
                    byte[] buffer = new byte[1024];
                    FileInputStream fis = null;
                    BufferedInputStream bis = null;
                    try {
                        fis = new FileInputStream(file);
                        bis = new BufferedInputStream(fis);
                        OutputStream os = response.getOutputStream();
                        int i = bis.read(buffer);
                        while (i != -1) {
                            os.write(buffer, 0, i);
                            i = bis.read(buffer);
                        }
                        System.out.println("success");
                    } catch (Exception e) {
                        e.printStackTrace();
                    } finally {
                        if (bis != null) {
                            try {
                                bis.close();
                            } catch (IOException e) {
                                e.printStackTrace();
                            }
                        }
                        if (fis != null) {
                            try {
                                fis.close();
                            } catch (IOException e) {
                                e.printStackTrace();
                            }
                        }
                    }
                }
            }
            return null;
        }
        //多文件上传
        @RequestMapping(value = "/batch/upload", method = RequestMethod.POST)
        @ResponseBody
        public String handleFileUpload(HttpServletRequest request) {
            List<MultipartFile> files = ((MultipartHttpServletRequest) request)
                    .getFiles("file");
            MultipartFile file = null;
            BufferedOutputStream stream = null;
            for (int i = 0; i < files.size(); ++i) {
                file = files.get(i);
                if (!file.isEmpty()) {
                    try {
                        byte[] bytes = file.getBytes();
                        stream = new BufferedOutputStream(new FileOutputStream(
                                new File(file.getOriginalFilename())));
                        stream.write(bytes);
                        stream.close();
    
                    } catch (Exception e) {
                        stream = null;
                        return "You failed to upload " + i + " => "
                                + e.getMessage();
                    }
                } else {
                    return "You failed to upload " + i
                            + " because the file was empty.";
                }
            }
            return "upload successful";
        }
    

    7、index.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <title>Getting Started: Serving Web Content</title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    </head>
    <body>
    <p>Get your greeting <a href="/greeting">here</a></p>
    <form action="/upload" method="POST" enctype="multipart/form-data">
        文件:<input type="file" name="test"/>
        <input type="submit" />
    </form>
    <a href="/download">下载test</a>
    <p>多文件上传</p>
    <form method="POST" enctype="multipart/form-data" action="/batch/upload">
        <p>文件1:<input type="file" name="file" /></p>
        <p>文件2:<input type="file" name="file" /></p>
        <p><input type="submit" value="上传" /></p>
    </form>
    </html>
    
    

    本文代码参考Spring官网:https://spring.io/guides/gs/serving-web-content/
    完整工程地址:http://download.csdn.net/detail/coding13/9739116

    欢迎关注我的个人微信公众号,查看专业的客户端/服务端开发知识、笔试面试题目、程序员职场经验与心得分享。
    在这里插入图片描述

    展开全文
  • 多文件上传

    千次阅读 2019-02-23 11:33:24
    一般的上传空间的原理都是使用input type='file’的h5元素实现的,那这个layui的原理也是如此。 每次点击选择文件按钮,控件自动生成一个input,将文件选择,选择后将其files中的属性提取出文件名,大小等信息,...

    在这里插入图片描述
    一般的上传空间的原理都是使用input type='file’的h5元素实现的,那这个layui的原理也是如此。

    每次点击选择文件按钮,控件自动生成一个input,将文件选择,选择后将其files中的属性提取出文件名,大小等信息,关于files可看这篇文章。选择的文件可以累加,文件的files都会保存在构造函数内部

    https://blog.csdn.net/qq_41129811/article/details/87890242

    上传时它将所有的files循环,每次上传时就给input赋值一个files[i],并请求,所以会出现多次请求。

    将这些信息写入table中用户展示。删除按钮也只是对dom操作而已。

    需要注意的是提交文件时,选中多少个文件他就会请求后台处理保存多少次,每次只提交一个文件,这是各个控件都没办法的事。
    在这里插入图片描述
    选择三个文件就请求三次,这样对于其他文本信息只需要传一次就极为不友好了。

    解决办法是先传文本信息,保存文本信息后返回新建的id在回调触发文件上传

    具体代码:

    html:

    <div class="row">
                                <div class="layui-upload-list col-sm-12">
                                    <table class="layui-table">
                                        <thead>
                                        <tr>
                                            <th>文件名</th>
                                            <th>大小</th>
                                            <th>状态</th>
                                            <th>操作</th>
                                        </tr>
                                        </thead>
                                        <tbody id="demoList"></tbody>
                                    </table>
                                </div>
                            </div>
                            <div class="modal-footer">
                                <button type="button" class="btn btn-default" data-dismiss="modal" onclick="window.location.reload()">关闭
                                </button>
                                <button type="button" class="btn btn-primary" id="testListAction" onclick="saveActivity()">
                                    确定
                                </button>
                                <button type="button" class="btn btn-primary" id="testListAction1" style="display:none">
                                    确定
                                </button>
                            </div>
    

    先初始化upload控件

    layui.use('upload', function () {
        var $ = layui.jquery
            , upload = layui.upload;
        //多文件列表示例
        var demoListView = $('#demoList')  //文件列表显示的元素
            , uploadListIns = upload.render({
            elem: '#testList'  //触发选择文件弹出的按钮
            , url: '/it/orderManage/saveActivityAttachment'
            , accept: 'file'   //后台接收的文件参数名
            , multiple: true   //是否可以上传多个文件
            , auto: false    //是否自动上传,一般是选false和bindAction配合使用
            , bindAction: '#testListAction1'   //触发上传文件的按钮
            ,number:0   //限制上传的个数,0为不限制
            , before: function (obj) { //obj参数包含的信息,跟 choose回调完全一致。其中输入向后台传输的参数
                this.data = {
                    'TID': TID
                };
            }
            , choose: function (obj) {
                var files = this.files = obj.pushFile(); //将每次选择的文件追加到文件队列
                //读取本地文件
                obj.preview(function (index, file, result) {
                    var tr = $(['<tr id="upload-' + index + '">'
                        , '<td>' + file.name + '</td>'
                        , '<td>' + (file.size / 1014).toFixed(1) + 'kb</td>'
                        , '<td>等待上传</td>'
                        , '<td>'
                        , '<button class="layui-btn layui-btn-mini demo-reload layui-hide">重传</button>'
                        , '<button class="layui-btn layui-btn-mini layui-btn-danger demo-delete">删除</button>'
                        , '</td>'
                        , '</tr>'].join(''));
     
                    //单个重传
                    tr.find('.demo-reload').on('click', function () {
                        obj.upload(index, file);
                    });
     
                    //删除
                    tr.find('.demo-delete').on('click', function () {
                        delete files[index]; //删除对应的文件
                        tr.remove();
                        uploadListIns.config.elem.next()[0].value = ''; //清空 input file 值,以免删除后出现同名文件不可选
                    });
                    demoListView.append(tr);
                });
            }
            , done: function (res, index, upload) {  //每个文件上传完成后的回调
                if (res.success) { //上传成功
                 var tr = demoListView.find('tr#upload-' + index)
                 , tds = tr.children();
                 tds.eq(2).html('<span style="color: #5FB878;">上传成功</span>');
                 tds.eq(3).html(''); //清空操作
                 return delete this.files[index]; //删除文件队列已经上传成功的文件
     
                 } else {
                 layer.alert(res.msg);
                 }
            },
            allDone: function (res, index, upload) {  //所有文件上传完成后的回调
                layer.alert("上传成功",function(){
                    layer.closeAll()
                    $("#trainInfoModal").modal("hide");
                    $('#orderTable').bootstrapTable("refresh");
                    $("#trainInfoModal input").val("");
                    $("#trainInfoModal textarea").val("");
                })
                /*this.error(index, upload);*/
            }
            , error: function (index, upload) {
                var tr = demoListView.find('tr#upload-' + index)
                    , tds = tr.children();
                tds.eq(2).html('<span style="color: #FF5722;">上传失败</span>');
                tds.eq(3).find('.demo-reload').removeClass('layui-hide'); //显示重传
            }
        });
    });
    

    然后先上传其他信息,再通过js控制按钮触发的方式回调传文件

    function saveActivity(){
        var flag=true;
        $('#form1 .form-control:not(".banner,#file1")').each(function () {
            //console.log($(this).attr("id"))
            if($(this).val()==""||$(this).val()==null){
                layer.alert("请填写完整信息");
                flag=false;
            }
            if($("#endtime").val()<$("#starttime").val()){
                layer.alert("结束时间未大于开始时间");
                flag=false;
            }
        })
        if($(".layui-table tbody").html()==""){
            layer.alert("请选择附件");
            flag=false;
        }
        if(flag){
            var formData = new FormData($("#form1")[0]);
            $.ajax({
                url : "/it/orderManage/saveActivity",
                type : 'POST',
                data : formData,
                // 告诉jQuery不要去处理发送的数据
                processData : false,
                // 告诉jQuery不要去设置Content-Type请求头
                contentType : false,
                async : true,
                success : function(ret) {
                    //alert("上传成功")
                    TID=ret
                    $("#testListAction1").trigger("click");  //触发上传文件
                }
            });
        }
    }
    

    java部分

    //保存文字信息并返回创建的id
        @RequestMapping(value = "/saveActivity", method = RequestMethod.POST, produces = "text/html;charset=utf-8")
        @ResponseBody
        public String saveActivity(@RequestParam Map<String,String> param,
                                   String TID,
                                   HttpServletRequest req) {
            RetBase ret = new RetBase();
            Map<String, String> p = new HashMap<String, String>();
            try {
               
                    orderManageService.updateTrainActivity(param);
                    param.put("T_PACKAGE_CODE", TID);
                    p.put("TID", TID);
                    return TID;
                  
               
            } catch (Exception e) {
                e.printStackTrace();
            }
            return JSON.toJSONString(ret);
        }
     
        //保存文件
        @RequestMapping(value = "/saveActivityAttachment", method = RequestMethod.POST, produces = "text/html;charset=utf-8")
        @ResponseBody
        public String saveActivityAttachment(@RequestParam Map<String,String> param,
                                             MultipartFile file,
                                             String TID,
                                             HttpServletRequest req) {
            RetBase ret = new RetBase();
            // String path = orderManageService.getPath("banner");
            String path1 = orderManageService.getPath("attachmentPath");
            Map<String, String> p = new HashMap<String, String>();
            p.put("descript", "");
            try {
                if (TID != null && !TID.equals("")) {
                    p.put("TID",TID);
                    // orderManageService.removeAttachment(param);
                    Map<String, String> name = uploadFile(file, path1, req);
                    p.put("attachmentUrl", path1 + name.get("saveName"));
                    p.put("attachmentName", name.get("oriName"));
                    p.put("fileType", name.get("fileType"));
                    orderManageService.saveTrainAttachment(p);
                    ret.setSuccess(true);
                }
            } catch (Exception e) {
                e.printStackTrace();
                ret.setSuccess(false);
            }
            return JSON.toJSONString(ret);
        }
     
     
    public Map<String, String> uploadFile(MultipartFile file, String path, HttpServletRequest request) throws IOException {
            String fileName = file.getOriginalFilename();
            //  String basepath=request.getSession().getServletContext().getRealPath("/");
            String fileType = fileName.substring(fileName.lastIndexOf(".") + 1, fileName.length()).toLowerCase();
    //        File tempFile = new File(path, new Date().getTime() + String.valueOf(fileName));
            String saveName = String.valueOf((new Date()).getTime()) + String.valueOf((int) (Math.random() * 9 + 1) * 1000) + '.' + fileType;
            File tempFile = new File(path, String.valueOf(saveName));
            if (!tempFile.getParentFile().exists()) {
                tempFile.getParentFile().mkdir();
            }
            if (!tempFile.exists()) {
                tempFile.createNewFile();
            }
            file.transferTo(tempFile);
            Map<String, String> map = new HashMap<String, String>();
            map.put("oriName", fileName);
            map.put("saveName", saveName);
            map.put("fileType", fileType);
            // return tempFile.getName();
            return map;
        }
    

    关于在mybatis中怎么将刚插入创建生成的新id返回,可以参考这篇博文

    总之后台最好把其他信息还文件信息分开接收,接收文件不需要使用MultipartFile数组,因为一次只传一个

    展开全文
  • SpringMVC文件上传,多文件上传实例

    千次下载 热门讨论 2014-03-01 20:28:21
    在上一篇SpringMVC基础教程的源码基础上增加了文件上传,多文件上传
  • SWFUpload实现多文件上传

    千次下载 热门讨论 2014-01-17 15:48:13
    SWFUpload实现多文件上传,servlet+jsp
  • java 实现html5多文件选择上传_h5多文件上传_ajax异步多文件上传_java处理多文件上传 html页面如下 muti file upload method="POST" enctype="multipart/form-

    java 实现html5多文件选择上传_h5多文件上传_ajax异步多文件上传_java处理多文件上传
    html页面如下

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>muti file upload</title>
    </head>
    <body>
    
    	<form name="upform" action="/nanjian_server/api/import/importMultiFile"
    		method="POST" enctype="multipart/form-data">
    
    		<input class="browseButton" name="uploadedfile" multiple="true"
    			accept=".xlsx,.xls,.txt" id="multiFile" type="file" id="uploader" />
    
    		<br>
    		<fieldset>
    			<input type="file" name="file1" id="file1" /> <br /> <br /> <input
    				type="file" name="file2" id="file2" /><br /> <br /> <input
    				type="file" name="file3" id="file3" /><br /> <br />
    		</fieldset>
    		<br>
    		<fieldset>
    			<input type="text" name="tableName" value="a,b" /> <input
    				type="text" name="importType" value="1,2" /> <input type="text"
    				name="splitSign" value="1,2" />
    		</fieldset>
    
    		<input type="submit" value="Submit" /><br /> <br /> <input
    			type="reset" />
    
    	</form>
    
    	<br>
    
    	<button id="ajaxSubmitBtn">ajax upload</button>
    
    
    	<script type="text/javascript"
    		src="http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>
    	<script type="text/javascript">
    		$('#multiFile').change(function() {
    
    			var file = this.files[0];
    			name = file.name;
    			size = file.size;
    			type = file.type;
    			//your validation
    
    			$('#file1') = this.files[1];
    
    			console.log(file);
    			console.log(this.files[1]);
    			console.log(this.files);
    			this.files = null;
    			console.log(this.files);
    
    		});
    
    		$('#ajaxSubmitBtn').click(function() {
    
    			var formData = new FormData($('form')[0]);
    
    			$.ajax({
    				url : '/nanjian_server/api/import/importMultiFile', //server script to process data
    				type : 'POST',
    				xhr : function() { // custom xhr
    					myXhr = $.ajaxSettings.xhr();
    					if (myXhr.upload) { // check if upload property exists
    						myXhr.upload.addEventListener('progress', function(e) {
    							console.log(e);
    
    						}, false); // for handling the progress of the upload
    					}
    					return myXhr;
    				},
    				//Ajax事件
    				beforeSend : function(e) {
    					console.log(e);
    				},
    				success : function(e) {
    					console.log(e);
    
    				},
    				error : function(e) {
    					console.log(e);
    				},
    				// Form数据
    				data : formData,
    				//Options to tell JQuery not to process data or worry about content-type
    				cache : false,
    				contentType : false,
    				processData : false
    			});
    
    		});
    	</script>
    </body>
    </html>

    java 后台处理主要代码

    		// 将request变成多部分request
    		MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;
    		Iterator<String>iter = multiRequest.getFileNames();
    		if (multipartResolver.isMultipart(request)) {
    			while (iter.hasNext()) {
    				String name=iter.next().toString();
    			
    				List<MultipartFile> files = new LinkedList<MultipartFile>();  
    		        files =multiRequest.getFiles(name);
    		       
    				// 一次遍历所有文件
     
    		        for (MultipartFile file : files) {
    		        	if (file != null) {
    		        		//一个文件
    		        		long fileSiz=file.getSize();
    		        		if(fileSiz>0){
    			        		String fileName = file.getOriginalFilename();// 原文件 名称
    		        		}
    		        	}
    				}
    				
    			}
    			
    			
    		} 



    展开全文
  • SpringBoot进阶之文件上传(单文件上传/多文件上传

    1.单文件上传

        private String uploadPath="D:\\tomcat\\apache-tomcat-7.0.81-windows-x64\\apache-tomcat-7.0.81\\webapps\\img\\";
    
        private String URL="http://127.0.0.1:8880/img/";
        /**
         * 单个文件上传   文件上传成功后返回文件的访问路径
         * @param file
         * @return
         */
        @ResponseBody
        @RequestMapping(value = "/upload",method = RequestMethod.POST)
        public Msg upload(@RequestParam("file")MultipartFile file) {
            if(!file.isEmpty()) {
                File fil=new File(uploadPath+file.getOriginalFilename());
                try {
                    BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(fil));
                    out.write(file.getBytes());
                    out.flush();
                    out.close();
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                    return ResultUtil.error(200, "文件上传失败{}" + e.getMessage());
                } catch (IOException e) {
                    e.printStackTrace();
                    return ResultUtil.error(200, "文件上传失败{}" + e.getMessage());
                }
                return ResultUtil.success(URL+fil.getName());       //返回上传文件的访问路径   getAbsolutePath()返回文件上传的绝对路径
            }else {
                return ResultUtil.error(201, "文件上传失败,文件为空");
            }
        }

    postman请求效果图:



    2.多文件上传

        private String uploadPath="D:\\tomcat\\apache-tomcat-7.0.81-windows-x64\\apache-tomcat-7.0.81\\webapps\\img\\";
    
        private String URL="http://127.0.0.1:8880/img/";
        /**
         * 多文件上传 并返回各个文件的访问路径
         * @param files
         * @return
         */
        @ResponseBody
        @RequestMapping(value = "/upload/batch", method = RequestMethod.POST)
        public Msg batchUpload(@RequestParam("files")MultipartFile[] files) {
    
            String uploadedFileName = Arrays.stream(files).map(x -> x.getOriginalFilename())
                    .filter(x -> !StringUtils.isEmpty(x)).collect(Collectors.joining(" , "));
            if (StringUtils.isEmpty(uploadedFileName)) {
                return ResultUtil.error(201,"文件上传失败,文件为空");
            }
            List<String> path=new ArrayList<>();
            try {
               path=  saveUploadedFiles(Arrays.asList(files));
            } catch (IOException e) {
                return ResultUtil.error(201,"文件上传异常"+e.getMessage());
            }
            return ResultUtil.success(path);
        }
    
    
        private  List<String> saveUploadedFiles(List<MultipartFile> files) throws IOException {
           List<String> paths=new ArrayList<>();
            for (MultipartFile file : files) {
                if (file.isEmpty()) {
                    continue;
                }
                byte[] bytes = file.getBytes();
                Path path = Paths.get(uploadPath + file.getOriginalFilename());
                paths.add(URL + file.getOriginalFilename());            //保存上传文件的访问路径
                Files.write(path, bytes);
            }
          return paths;
        }


    请求效果图:




    附:

    Java 8 中的 Stream API 详解:Stream详解


    展开全文
  • 本文详细讲解了SpringMVC实例单文件上传、多文件上传、文件列表显示、文件下载。 本文工程免费下载 一、新建一个Web工程,导入相关的包 springmvc的包+commons-fileupload.jar+connom-io.jar+commons-logging,jar...
  • SpringMVC单文件上传与多文件上传

    千次阅读 2017-06-22 10:57:32
    一、简述一个javaWeb项目中,文件上传功能几乎是必不可少的,本人在项目开发中也时常会遇到,以前也没怎么去理它,今天有空学习了一下这方面的知识,于是便将本人学到的SpringMVC中单文件与多文件上传这部分知识做下...
  • FastDFS上传文件二 : 多文件上传

    千次阅读 2017-09-27 15:28:13
    FastDFS上传文件二 : 多文件上传
  • SSM框架使用Layui文件上传插件实现多文件上传(多文件列表) pom.xml文件的配置 想要实现SSM框架实现多文件上传,必要的jar包必须要在pom.xml文件中引入。如下: <!--commons-fileupload --> <...
  • Spring boot 多文件上传注意要点

    万次阅读 2018-09-20 18:11:14
    springboot多文件上传时,应注意以下要点: 1、多文件采用MultipartFile[ ]接收 2、单个文件信息对MultipartFile对象进行解析 3、上传文件大小spring.http.multipart.max-file-size设置 4、测试中上传目标目录的...
  • 使用LayUI进行文件上传(多文件上传)

    千次阅读 2019-08-15 16:31:42
    使用LayUI进行文件上传(多文件上传) 1、添加LayUI上传组件需要的js文件 jquery.min.js、layui.all.js、layer.js 2、导入Java上传组件包 commons-fileupload、commons-io 3、在spring中配置上传文件大小限制 <!-...
  • 二、单文件与多文件上传 三、多文件上传 四、带参数上传 一、配置SpringMVC 在spring.xml中配置: <!-- springmvc文件上传需要配置的节点--> <bean id="multipartResolver" class="org.spring...
  • swagger多文件上传

    千次阅读 2019-04-25 21:18:27
    swagger只能测试单文件上传 如果是文件数组 就会传递空值,这和接口没有什么管用多文件上传接口可以用 postMan 工具测试 欢迎留言交流
  • 上回提到 PHP的单个文件上传、多个单文件上传、多文件上传 这里给出 三种方式的统一实现 下面先给出各种方式的文件提交页面: 单个文件上传 upload1.php 单文件上传 请选择您要上传的文件: ...
  • flexbuilder:3 ,Myeclipse:10.0,struts:2.3. ...flex使用FileReference实现单文件上传,使用FileReferenceList实现多文件上传。 1. 单文件上传: flex单文件上传,一般要经过哪些步骤呢? (1)初始化一个F
  • SWFUpload上传组件的一个完整的例子,后台由Struts2完成,有上传进度显示,可以多文件上传,如果你想使用SWFUpload组件但还不知道怎样使用,可以下载下来运行一下试试,看一下源码就知道了。
  • spring boot实现文件上传下载以及多文件上传
  • 基本的SpringMVC的搭建在我的上一篇文章里已经写过了,这篇文章主要说明一下如何使用SpringMVC进行表单上的文件上传以及个文件同时上传的步骤 SpringMVC 基础教程 框架分析:...
  • 若依多文件上传

    千次阅读 2020-05-29 11:04:46
    背景:使用若依开源项目,没有多文件上传功能 前提:单文件上传成功,方法:参照若依项目官网文档 多文件上传方式: 1: 添加 multiple 2: 修改 function submitHandler() { uploadFile(); } 3: function ...
  • Ajax file upload plugin是一个功能强大的文件上传jQuery插件,可自定义链接、或其它元素庖代传统的file表单上传结果,可实现Ajax动态提示文件上传 过程,同时支撑多文件上传,AjaxFileUpload文件上传插件功能...
  • ajaxFileUpload多文件上传

    千次阅读 2017-08-09 21:33:34
    ajaxFileUpload默认只支持单个文件上传,搜索资料发现,只要...1.ajaxfileupload.js修改修改部分如下://修改源码,支持多文件上传 for(var i in fileElementId){ var oldElement = jQuery('#' + fileElementId[i]);
  • Spring boot 文件上传(多文件上传)

    万次阅读 2016-09-01 12:47:08
    转:... 文件上传主要分以下几个步骤: (1)新建maven java project; (2)在pom.xml加入相应依赖;...(3)新建一个表单页面(这里使用thymleaf);...(7)多文件上传实现 (1)
  • swagger多文件上传问题

    千次阅读 2019-10-11 19:40:44
    如果要测试多文件上传,可以使用PostMan。 单文件上传测试: @RequestMapping(value = "/myUploadTest", method = {RequestMethod.POST},headers = "content-type=multipart/form-data") ...
  • 支持多文件上传的jQuery文件上传插件Uploadify,目前此插件有两种版本即Flash版本 和HTML5版本,对于HTML5版本会比较好的支持手机浏览器,避免苹果手机Safari浏览器不支持 Flash,主要特性:支持多文件上传、HTML5...
  • springboot实现多文件上传

    千次阅读 2019-07-29 10:28:18
    实现springboot的多文件上传,首先创建一个springboot项目,添加spring-boot-starter-web依赖。 然后在resources下的static文件夹下创建uploads.html文件,文件内容如下: <!DOCTYPE html> <...
  • OkhttpUtils单、多文件上传

    千次阅读 2017-07-10 10:27:03
    OkhttpUtils文件上传,多文件上传时addFile中name 需要更变,要不只是传第一个后面的不传,类似Map键值存储,已解决多文件上传只传第一个的问题
  • 平时使用网盘等工具的时候,总是多文件上传缓慢,总结一下问题 (1)千万不要上传Android的全体资源包 (2)多文件的时候一定要压缩。 分开压缩可以保持文件的完整性。 上传这就很棒了! ...
  • 注:先写下两个点,等空下来再上代码~1.多图片上传预览,且可对图片进行编辑可对 input[type=file] 对象获取 obj.files 获取 ...Android 端web不支持多文件上传,IOS支持。 解决:微信公众号开发可可调用微信jssdk接口
  • PHP实现多文件上传

    千次阅读 2016-07-28 22:14:25
    PHP单文件或者多文件上传, 对上传文件与上传文件信息构建进行了函数封装, 通过前端和后端共同实现文件上传功能。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 52,257
精华内容 20,902
关键字:

多文件上传