【问题标题】:How to do file upload with Spring REST API and Test it with RestTemplate如何使用 Spring REST API 进行文件上传并使用 RestTemplate 进行测试
【发布时间】:2013-04-08 15:57:28
【问题描述】:

我愿意,

1) 使用 Spring Rest API 实现一些 REST 服务方法,以便从我的远程 Web 客户端上传一些文件。

2) 使用我的基于 RestTemplate 的远程 Web 客户端进行测试。

如果有人有任何想法,请帮助我。谢谢。

我的一些 Spring REST API 基础方法如下,

@RequestMapping(value="user/create/{userRoleName}", method=RequestMethod.POST)
    public @ResponseBody User create(@RequestBody User user, @PathVariable String userRoleName, HttpServletResponse response) { }

我的一些远程客户端的 Spring RestTemplate 基本代码如下,

Map<String, String> vars = new HashMap<String, String>();
            vars.put("userRoleName", userRoleName);
            ResponseEntity<User> REcreateUser = restTemplate.postForEntity(IMC_LAB_SKELETON_URL + "/user/create/{userRoleName}", newUser, User.class, vars);
            User createUser = REcreateUser.getBody();

【问题讨论】:

    标签: spring rest resttemplate


    【解决方案1】:

    试试这个:

    public class FileUploadService { 
        @POST
        @Path("/file")
        @Consumes(MediaType.MULTIPART_FORM_DATA)
        public Response upload(Attachment attachment,@Context HttpServletRequest request) {
                DataHandler handler = attachment.getDataHandler();
                try {
                    InputStream stream = handler.getInputStream();
                    MultivaluedMap map = attachment.getHeaders();
                    OutputStream out = new FileOutputStream(new File(getFileName(map)));
    
                    int read = 0;
                    byte[] bytes = new byte[1024];
                    while ((read = stream.read(bytes)) != -1) {
                        out.write(bytes, 0, read);
                    }
                    stream.close();
                    out.flush();
                    out.close();
                } catch(Exception e) {
                  e.printStackTrace();
                }
            }
    
            return Response.ok("file uploaded").build();
        }
    

    这可以通过RestTemplate 轻松测试。

    进口:

    【讨论】:

    • 嗨,JSS!非常感谢您的回复。您能否提及为此导入的课程列表。非常感谢。
    • @Channa:现在答案中添加了导入。
    • 非常感谢您的反馈。目前我坚持使用 RestTemplate 进行测试,你能帮帮我吗?非常感谢。
    【解决方案2】:
     HttpHeaders headers = new HttpHeaders();
     headers.setContentType(MediaType.MULTIPART_FORM_DATA);
     MultiValueMap<String, Object> bodyMap = new LinkedMultiValueMap<>();
     //Json Payload as String
     bodyMap.add("payload", payload);
     for (File file : fileArray) {
       bodyMap.add("file", new FileSystemResource(file));
     }
     HttpEntity<MultiValueMap<String, ?>> entity = new           
     HttpEntity<MultiValueMap<String, ?>>(bodyMap, headers);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-13
      • 2014-03-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多