весна 3 загрузить много файлов - PullRequest
11 голосов
/ 07 января 2010

Да, наш клиент хочет загрузить более одного файла. мы используем пружину 3 мвк. официальный пример как это:

разметка:

<form method="post" action="/form" enctype="multipart/form-data">
    <input type="text" name="name"/>
    <input type="file" name="file"/>
    <input type="submit"/>
</form>

Код:

@RequestMapping(value = "/form", method = RequestMethod.POST)
public String handleFormUpload(@RequestParam("name") String name,
                               @RequestParam("file") MultipartFile file) {

    if (!file.isEmpty()) {
        byte[] bytes = file.getBytes();

        // store the bytes somewhere
        return "redirect:uploadSuccess";
    } else {
        return "redirect:uploadFailure";
    }
}

есть только один файл, поэтому я могу записать имя файла в методе. но что мне делать, если я хочу загрузить много файлов. Я не мог написать все имена входных файлов, потому что если генерируется кодом JS. я только знаю, что его имя, как «attach_» то, что я должен написать в методе? если я напишу так

@RequestParam() MultipartFile file

или

@RequestParam("attach_") MultipartFile file

Я получу ошибку.

Ответы [ 5 ]

9 голосов
/ 22 ноября 2010

Он работает с Spring 3.0.4 (в предыдущих версиях Spring была проблема, поэтому обязательно используйте> = 3.0.4).

Чтобы проверить это, вы можете использовать следующие шаги:

public class MultiPartFileUploadBean {

    private List<MultipartFile> files;

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

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

Контроллер:

@RequestMapping(value = "/uploadtest", method = RequestMethod.POST)
public String uploadtestProcess(MultiPartFileUploadBean file, BindingResult bindingResult,
        Model model) throws IOException {
    ... // binding check
    StringBuilder sb = new StringBuilder();
    List<MultipartFile> files = file.getFiles();
    for(MultipartFile f:files)
        sb.append(String.format("File: %s, contains: %s<br/>\n",f.getOriginalFilename(),new String(f.getBytes())));
    String content = sb.toString();
    model.addAttribute("content", content);
    return "uploadtest";
}

JSP:

<form method="post" action="/uploadtest" enctype="multipart/form-data">
<p>Type: <input type="text" name="type" value="multiPartFileSingle" size="60" /></p>
<p>File 1: <input type="file" name="files[0]" size="60" /></p>
<p>File 2: <input type="file" name="files[1]" size="60" /></p>
<p><input type="submit" value="Upload" /></p>
</form>
<c:if test="${not empty content}">
<p>The content uploaded: <br/>${content}</p>
9 голосов
/ 14 августа 2015

Намного проще - у меня работает

/*** Upload Images ***/
@RequestMapping(value = "/images/upload", method = RequestMethod.POST)
public void upload(@RequestParam("file") List<MultipartFile> files, @RequestParam("user") String user) {

    files.forEach((file -> System.out.println(file.getOriginalFilename())));

}
1 голос
/ 29 июня 2016

Я нашел более понятным использование объекта MultipartHttpServletRequest в качестве параметра для метода контроллера:

@RequestMapping(value = "/save", method=RequestMethod.POST)
protected String save(Model model, MultipartHttpServletRequest multipartRequest) {
    MultipartFile file = multipartRequest.getFile("field-name");
    // Also multiple files with same name
    List<MultipartFile> files = multipartRequest.getFiles("multifield-name");
    // ...
}

Ссылка на документы: http://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html#mvc-multipart-resolver-commons

0 голосов
/ 29 июня 2016

Вы используете модель и форму.

(HTML / JSP)

<form id="uploadForm" method="POST"enctype="multipart/form-data/charset=UTF-8">
     //...multi file, add dynamic input
     <input type="file" name="file"/>
     <input type="file" name="file"/>
     <input type="file" name="file"/>
     <input type="file" name="file"/>
</form>
<input type="button" id="save_button" value="save" />

(Js)

var form = new FormData(document
        .getElementById('uploadForm'));

$.ajax({
    url : "/test/upload/file,
    type : 'POST',
    dataType : 'text',
    data : form,

    processData : false,
    contentType : false,

    success : function(response) {
        if (response == "success") {
            document.location.reload(true);

        } else {
            $("#editMsg").text("fail");
        }
    },
    error : function(request, status, error) {

    }
});

(модель)

public class fileModel {
   private List<MultipartFile> file; // this name = input name

  ... setter, getter
}

(Контроллер)

@RequestMapping(value = "/upload/file", method = RequestMethod.POST)
public @ResponseBody String uploadFiles(fileModel model, HttpServletRequest req) {

    return "success" // <-- debug. break point !! Your watch model. 
}
0 голосов
/ 08 июля 2010
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...