java - 将多部分文件发送到 REST api 时出现 Spring 错误

标签 java spring rest upload multipart

我正在尝试将图像发送到我的 REST Web 服务,但收到错误。 我尝试了很多不同的方法(保存字节数组,发送另一种类型的文件,...)但没有找到好的方法。

Spring服务代码(带参数调用API):

public void uploadImage(String id, MultipartFile file) {
    RestTemplate rt = new RestTemplate();
    LinkedMultiValueMap<String, Object> map = new LinkedMultiValueMap<>();
    map.add("filename", "tt");
    map.add("extension", "png");
    map.add("file", file);
    HttpHeaders headers = new HttpHeaders();
    headers.setContentType(MediaType.MULTIPART_FORM_DATA);

    HttpEntity<LinkedMultiValueMap<String, Object>> requestEntity = new HttpEntity<LinkedMultiValueMap<String, Object>>(
            map, headers);
    ResponseEntity<String> result = rt.exchange(WebConstant.API_URL + "melt/" + id + "/image", HttpMethod.POST, requestEntity, String.class);
}

API代码:

@RequestMapping(value="/{meltId}/image", method=RequestMethod.POST)
public @ResponseBody String uploadMeltImage(@PathVariable String meltId, @RequestParam String filename, @RequestParam String extension, @RequestParam("file") MultipartFile file){
    System.out.println("check 1");
    Melt knownMelt = meltRepo.findOne(meltId);
    if (file != null && knownMelt != null && extension != null && filename != null) {
        try {
            String url = filename + "." + extension;
            InputStream is = file.getInputStream();

            // Prepare buffered image.
            BufferedImage img = ImageIO.read(is);

            // Create a byte array output stream.
            ByteArrayOutputStream bao = new ByteArrayOutputStream();

            // Write to output stream
            ImageIO.write(img, extension, bao);

            if (knownMelt.getImageUrl() != url){
                knownMelt.setImageUrl(url);
                meltRepo.save(knownMelt);
            }
            return "You successfully uploaded for melt" + meltId + "!";

        } catch (Exception e) {
            return "You failed to upload for melt" + meltId + " => " + e.getMessage();
        }
    } else {
        return "You failed to upload for melt" + meltId + " because the file was empty.";
    }
}

有人有解决方案将我的文件发送到我的 API 然后能够保存它吗?

最佳答案

您可以将文件转换为 Base64 字符串并在使用 @Lob 的注释的帮助下存储,而不是使用 MultiPartFile 处理文件。您可以使用 FileReader 对象来读取文件,同时将其发送到 REST Web 服务。

关于java - 将多部分文件发送到 REST api 时出现 Spring 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37795516/

相关文章:

java - 当在方法级别内部使用 @PreAuthorize 或 @PostAuthorize 时,Class.getAnnotations() 不会返回类级别注释的完整列表

java - Spring框架和Quartz调度器

java - Spring 3项目中的Hibernate基础配置-找不到类异常

json - 从 AngularJS 到 Spring RestController 的混合 POST 提交

python - ModelViewSet API 端点是什么

java - 与运算符优先级相关的混淆

java - 格式化剪贴板Java

java - 使用 Maven surefire 插件来包含测试

asp.net-mvc - MVC RESTful 服务授权

java - JDK 17 spring boot 无法使 java.time.LocalDateTime 私有(private)化