我正在尝试测试此控制器:
@RequestMapping(value="/u",consumes="multipart/form-data", method = RequestMethod.POST)
public @ResponseBody String register(
@RequestParam String u,
@RequestParam CommonsMultipartFile filea,
@RequestParam CommonsMultipartFile fileb,
@RequestParam CommonsMultipartFile filec,
@RequestParam CommonsMultipartFile filed) {
return "hi";
}
使用此模拟请求:
mockMvc.perform(
MockMvcRequestBuilders.fileUpload("/u")
.file("filea","id.jpg".getBytes())
.file("fileb","pc.jpg".getBytes())
.file("filec","cl.jpg".getBytes())
.file("filed","fo.jpg".getBytes())
.param("u", u))
.andExpect(MockMvcResultMatchers.status().isOk())
.andDo(MockMvcResultHandlers.print());
虽然,我猜我写MockMvcRequest错误,因为测试失败(返回的状态是500)。
提前感谢。
如何测试多部分上传的简单方法是使用Standard ardServletMultipartResolver。并使用以下代码进行测试:
final MockPart profilePicture = new MockPart("profilePicture", "stview.jpg", "image/gif", "dsdsdsd".getBytes());
final MockPart userData = new MockPart("userData", "userData", "application/json", "{\"name\":\"test aida\"}".getBytes());
this.mockMvc.perform(
fileUpload("/endUsers/" + usr.getId().toString()).with(new RequestPostProcessor() {
@Override
public MockHttpServletRequest postProcessRequest(MockHttpServletRequest request) {
request.addPart(profilePicture);
request.addPart(userData);
return request;
}
})
MockPart类
public class MockPart extends MockMultipartFile implements Part {
private Map<String, String> headers;
public MockPart(String name, byte[] content) {
super(name, content);
init();
}
public MockPart(String name, InputStream contentStream) throws IOException {
super(name, contentStream);
init();
}
public MockPart(String name, String originalFilename, String contentType, byte[] content) {
super(name, originalFilename, contentType, content);
init();
}
public MockPart(String name, String originalFilename, String contentType, InputStream contentStream) throws IOException {
super(name, originalFilename, contentType, contentStream);
init();
}
public void init() {
this.headers = new HashMap<String, String>();
if (getOriginalFilename() != null) {
this.headers.put("Content-Disposition".toLowerCase(), "form-data; name=\"" + getName() + "\"; filename=\"" + getOriginalFilename() + "\"");
} else {
this.headers.put("Content-Disposition".toLowerCase(), "form-data; name=\"" + getName() + "\"");
}
if (getContentType() != null) {
this.headers.put("Content-Type".toLowerCase(), getContentType());
}
}
@Override
public void write(String fileName) throws IOException {
}
@Override
public void delete() throws IOException {
}
@Override
public String getHeader(String name) {
return this.headers.get(name.toLowerCase());
}
@Override
public Collection<String> getHeaders(String name) {
List<String> res = new ArrayList<String>();
if (getHeader(name) != null) {
res.add(getHeader(name));
}
return res;
}
@Override
public Collection<String> getHeaderNames() {
return this.headers.keySet();
}
}
这个问题很小-只需将您的CommonsMultipartFile更改为MultipartFile,您的测试就可以干净地运行了。
出现此问题的原因是,创建的模拟文件上载参数是一个MockMultipartFile,不能转换为更具体的CommonMultipartFile类型。
是否可以使用数据上传包含其他数据(如描述等)的文件?我正在使用骨干.js在我的前端,我用它调用REST API(jQuery)。我不使用任何视图解析器,但我想以某种方式将我的文件传递给控制器,如下所示: 以便uploadItem存储: 但是我不会(也不能)把这个加到我的模型里。 当然,我也很感兴趣是否有可能有这样的控制器:
无论我怎么努力,似乎都无法解决这个问题。我正在提交此curl命令: 我有一个带有注释@RestController的Spring Boot 1.4应用程序,方法如下: filedata变量始终为null,请求对象始终显示0个文件。 我已经尝试了MultipartResolver的多种配置。这是我的最新消息: 我也在我的应用程序中手动粘贴了这些。属性,以确保其未被禁用: Springhttp。多部分
我使用Spring引导上传文件。文件大小通常约为2GB,我们不能使用默认的Spring引导或,因为服务器具有有限的资源(磁盘空间)或用于缓冲的内存。所以我们想获取文件输入蒸汽并将文件直接存储到云存储中。 我知道spring boot有<code>多部分。已启用属性,因此我可以将其设置为false以跳过spring。但这会全局禁用多部分。是否有人知道是否有方法通过控制器/方法禁用多部分?
我无法编写将文件上载到控制器的测试。 在这一问题发生的所有事件中,我没有看到任何事情对我有效。 我可以从我的webapp上传和存储文件,但是当我运行测试时,控制器中的文件总是空的 应用程序 控制器 测验
我正在尝试在 Java 应用程序中设置一个 Apache Camel 路由,其中使用者终结点是一个 restlet 组件,它将 HTTP 文件上传作为多部分表单数据的 POST 进行处理,然后创建者终结点将请求转发到也接受多部分表单数据的 rest 服务。我是骆驼的新手,不知道如何正确地连接它。以下是到目前为止我的路线。我是否需要对正文进行任何转换,还是会按原样转发多部分表单数据?有人可以为我提供
我正在尝试使用Support Bee API创建附件,如下所述:https://supportbee.com/api#create_attachment 我编写了一个服务,它使用创建并发送使用文件名的请求。 如果我在《邮递员》中测试,它会成功。我正在为正文使用,只是从UI中选择要上载的文件: 当我试图通过我的服务上传它时,它不起作用: 这将导致500内部服务器错误。检查对象时,我可以看到它的标题值