Как создать объект CommonsMultipartFile только для файла - PullRequest
14 голосов
/ 30 апреля 2010

У меня есть метод тестирования junit, который принимает объект CommonsMultipartFile в качестве параметра.

Я пытаюсь создать объект FileItem, чтобы я мог передать его конструктору,

CommonsMultipartFile(org.apache.commons.fileupload.FileItem fileItem)

Для этого я пытаюсь создать объект FileItem с помощью конструктора DiskFileItem,

DiskFileItem(java.lang.String fieldName, java.lang.String contentType, boolean isFormField, java.lang.String fileName, int sizeThreshold, java.io.File repository)

но я не уверен, как передать какой-либо из этих параметров.

У меня все это работает в MVC-контроллере Spring 3, но для выполнения моих тестов junit мне нужно передать методу два объекта. Одним из них является объект UploadItem, который выглядит следующим образом:

import org.springframework.web.multipart.commons.CommonsMultipartFile;

public class UploadItem {
 private String fileName;
 private String filePath;
 private CommonsMultipartFile fileData;

 public String getFileName() {
  return fileName;
 }

 public void setFileName(String fileName) {
  this.fileName = fileName;
 }

 public String getFilePath() {
  return filePath;
 }

 public void setFilePath(String filePath) {
  this.filePath = filePath;
 }

 public CommonsMultipartFile getFileData() {
  return fileData;
 }

 public void setFileData(CommonsMultipartFile fileData) {
  this.fileData = fileData;
 }
}

Для метода setFileData () требуется объект CommonsMultipartFile, который я пытаюсь создать только для данного файла в моем каталоге src / test / resources.

Кто-нибудь знает, как я могу взять файл, создать объект FileItem и передать его конструктору объекта CommonsMultipartFile?

Спасибо. Если что-то неясно, пожалуйста, дайте мне знать - я не настолько знаком с загрузкой файлов Spring MVC.

Ответы [ 2 ]

31 голосов
/ 26 июля 2011

Используйте более распространенный интерфейс org.springframework.web.multipart.MultipartFile. вместо org.springframework.web.multipart.commons.CommonsMultipartFile в вашей команде (UploadItem). (CommonsMultipartFile является реализацией интерфейса 1: 1).

Теперь вы можете создать экземпляр CommonsMultipartFile с классом макета org.springframework.mock.web.MockMultipartFile. (который является элементом spring-test.jar).

Тогда создание MultipartFile в тестах - это всего лишь один оператор без приведения:

MockMultipartFile mockMultipartFile = new MockMultipartFile(
       "test.txt",                //filename
       "Hallo World".getBytes()); //content
0 голосов
/ 16 июня 2014

Как это может помочь?Вы не устанавливаете файл в запросе, он должен использоваться следующим образом:

MultipartFile multipartFile = getMockCommonsMultipartFile(BULK_CSV);
MockMultipartHttpServletRequest request = new MockMultipartHttpServletRequest();
request.addFile(multipartFile);
CommonsMultipartFile commonsMultipartFile = (CommonsMultipartFile) request.getFile(BULK_CSV);

Я использую метод с аргументом CommonsMultipartFile, иначе я мог бы использовать MockMultipartFile напрямую.

 private MultipartFile getMockCommonsMultipartFile(String name, String path) throws IOException {
        InputStream is = getClass().getResourceAsStream(path);
        MultipartFile multipartFile = new MockMultipartFile(name, name, "", is);
        return multipartFile;
    }
...