如何只给出一个文件来创建CommonsMultipartFile对象

时间:2010-04-29 21:30:54

标签: spring spring-mvc file-upload apache-commons

我有一个junit测试方法,它将CommonsMultipartFile对象作为参数。

我正在尝试创建一个FileItem对象,以便将其传递给构造函数

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

为此,我正在尝试使用DiskFileItem构造函数创建FileItem对象,

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

但我不确定如何传递任何这些参数。

我所有这些都在Spring 3 MVC控制器中工作,但是为了进行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 个答案:

答案 0 :(得分:31)

使用更常见的界面org.springframework.web.multipart.MultipartFile。代替 您的命令(UploadItem)中的org.springframework.web.multipart.commons.CommonsMultipartFile。 (CommonsMultipartFile是接口的1:1实现)。

现在,您可以使用模拟类org.springframework.mock.web.MockMultipartFile创建CommonsMultipartFile的实例。 (这是spring-test.jar)的元素。

然后在测试中创建MultipartFile只是一个语句,没有任何强制转换:

MockMultipartFile mockMultipartFile = new MockMultipartFile(
       "test.txt",                //filename
       "Hallo World".getBytes()); //content

答案 1 :(得分:0)

这有什么帮助?你没有在请求上设置文件,它应该像这样使用:

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;
    }