2016-02-15 66 views
0

我尝试将文件夹的内容上传到服务器。但是我做不到,所以我举了一个例子,你必须选择每一个文件。将文件夹上传到服务器(mvc spring)

控制器:

@Controller 
public class FileUploadController { 


    @RequestMapping(value = "/save", method = RequestMethod.POST) 
    public String save(@ModelAttribute("uploadForm") FileUploadForm uploadForm,Model map) {} 
} 

JSP文件

<%@ page language="java" contentType="text/html; charset=UTF-8" 
    pageEncoding="UTF-8"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%> 
<html> 
<head> 
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" integrity="sha384-1q8mTJOASx8j1Au+a5WDVnPi2lkFfwwEAa8hDDdjZlpLegxhjVME1fgjWPGmkzs7" crossorigin="anonymous"> 

    <title> - Upload</title> 
<script 
src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script> 
<script> 
$(document).ready(function() { 
    //add more file components if Add is clicked 
    $('#addFile').click(function() { 
     var fileIndex = $('#fileTable tr').children().length; 
     $('#fileTable').append(
       '<tr><td>'+ 
       ' <input type="file" name="files['+ fileIndex +']" />'+ 
       '</td></tr>'); 
    }); 

}); 
</script> 

</head> 
<body> 

<div align="center" class="jumbotron"> 
<h1>dd</h1> 
<form:form method="post" action="save.html" 
     modelAttribute="uploadForm" enctype="multipart/form-data"> 

    <p>Dateien auswählen zum uploaden</p> 

    <input class="btn btn-success" id="addFile" type="button" value="Datei hinzufügen" /> 
    <table align="center" class="table table-striped" id="fileTable"> 
     <tr> 
      <td><input name="files[0]" type="file" /></td> 
     </tr> 
     <tr> 
      <td><input name="files[1]" type="file" /></td> 
     </tr> 
    </table> 
    <br/><input class="btn btn-primary" type="submit" value="Upload" /> 
</form:form> 
</div> 

</body> 
</html> 

那伟大工程。我发现了一些例子,我可以一次选择多个文件(只需添加多个文件),但不能上传它们。我得到了一些麻烦,让这个工作。我很惊讶它很难做到这么简单的事情。我不知道我是否必须更改我的控制器文件或只有我的jsp文件。我希望有人能将我的想法告诉我。我是新来的,所以请跟我说说喜欢一个小傻瓜。 电贺 山姆

回答

1

单个文件的输入形式:

如果你只需要简单地选择多个文件,并将其上传,你几乎做到了。你只需要声明场你形成模型List

public class FileUploadForm { 

    private List<MultipartFile> files; 

    public List<MultipartFile> getFiles() { 
     return files; 
    } 

    public void setFiles(List<MultipartFile> files) { 
     this.files = files; 
    } 
} 

现在你控制器,你可以访问此列表:

@Controller 
public class FileUploadController { 


    @RequestMapping(value = "/save", method = RequestMethod.POST) 
    public String save(@ModelAttribute("uploadForm") FileUploadForm uploadForm, Model map) { 

     for(MultipartFile file : uploadForm.getFiles()){ 
      try { 
       file.transferTo(new File(targetPath+file.getOriginalFilename())); 
      } catch (IOException e) { 
       throw new RuntimeException(); 
      } 
     } 
    } 

} 

在窗体的事业而你必须指定文件的multiple属性输入:

<form:form method="post" action="/save" modelAttribute="uploadForm" enctype="multipart/form-data"> 
     <input name="files" type="file" multiple=""/> 
     <button type="submit">Upload</button> 
    </form:form> 

注意,在这种方式,你不应该使用数组语法,就像file[],在输入名称。


表单上的多个文件输入。

让我们考虑一下,如果您想要加载文件,就像它在代码片段中所显示的那样,为每个文件添加新的文件输入。首先,从表格的模型中删除字段List<MultipartFile> files。我们将以另一种方式获得它。现在控制器的方法如下:

@RequestMapping(value = "/upload", method = RequestMethod.POST) 
public String upload(@ModelAttribute("uploadForm")FileUploadModel uploadForm, 
        @RequestParam("files[]") List<MultipartFile> fileList, ModelMap model) throws IOException { 
     for(MultipartFile file : fileList){ 
      try { 
       file.transferTo(new File(targetPath+file.getOriginalFilename())); 
      } catch (IOException e) { 
       throw new RuntimeException(e); 
      } 
     } 
} 

正如你所看到的,现在我们分别声明了窗体和文件列表的模型。还要注意,该列表具有@RequestParam以及表单字段的名称。这个名字用数组语法指定 - files[]。现在

,形式应该如何看起来像:

<form:form method="post" action="/save" modelAttribute="uploadForm" enctype="multipart/form-data"> 
     <input name="files[]" type="file" multiple=""/> 
     <input name="files[]" type="file" multiple=""/> 
     <input name="files[]" type="file" multiple=""/> 
     <button type="submit">Upload</button> 
    </form:form> 

在这个例子中,我添加了多个文件输入静态的,但你可以用JavaScript动态地做到这一点,确实如此。请注意,您不应该在输入名称中指定数组项目的索引。只是files[],但不是files[0]file[1]

顺便说一句,在单个文件输入的情况下,也可以接收文件列表作为方法的参数。只需从模型中删除文件列表并将其声明为控制器方法的参数。

相关问题