当前位置: 首页 > 知识库问答 >
问题:

使用客户端Java代码进行多部分文件上传

宋新知
2023-03-14

我在spring boot中编写了一个restful web服务来接收文件。

@RequestMapping(value = "/upload", method = RequestMethod.POST)
@ResponseBody
public void uploadFile(@RequestParam("file") MultipartFile uploadfile) {
    System.out.println("filename: " + uploadfile.getName());
}

如何将文件从客户端java代码上传到web服务。而不是AJAX调用或HTML页面表单多部分请求?

下面的代码使用JSON对象调用web服务。像这样,我想在上面写的web服务中接收文件。

void clientRequest(String server_url, JSONObject fileObj){

  try {

    URL url = new URL(server_url);
    HttpURLConnection conn = (HttpURLConnection) url.openConnection();
    conn.setDoOutput(true);
    conn.setRequestMethod("POST");
    conn.setRequestProperty("Content-Type", "application/json");

    OutputStream os = conn.getOutputStream();
    os.write(fileObj.toString().getBytes());
    os.flush();

    BufferedReader br = new BufferedReader(new InputStreamReader(
            (conn.getInputStream())));

    String output;
    System.out.println("Output from Server .... \n");
    while ((output = br.readLine()) != null) {
        logger.info("output :: " + output);
    }

    conn.disconnect();

  } catch (Exception e) {
    e.printStackTrace();
  }
}

共有2个答案

危宜
2023-03-14

如果要使用多部分文件,则在请求时必须使用多部分/表单数据mimetype。不应将JSON作为请求实体发送,而应使用单个字段文件构建一个特定的多部分实体。

这是如何做到的:如何使用Java进行多部分/表单数据POST请求?

黄淇
2023-03-14

您可以使用Spring的HttpEntityByteArrayResource来上传文件,下面是一个例子:

MultiValueMap<String, Object> data = new LinkedMultiValueMap<String, Object>();
ByteArrayResource resource = new ByteArrayResource(file.getBytes()) {
    @Override
    public String getFilename() {
        return file.getName();
    }
};
data.add("file", resource);

HttpHeaders requestHeaders = new HttpHeaders();
requestHeaders.setContentType(MediaType.MULTIPART_FORM_DATA);

HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<MultiValueMap<String, Object>>(data, requestHeaders);

final ResponseEntity<<SomeClass>> responseEntity = restTemplate.exchange(<url>, 
        HttpMethod.POST, requestEntity, new ParameterizedTypeReference<SomeClass>(){});

SomeClass result = responseEntity.getBody();
 类似资料:
  • 本文向大家介绍Java下http下载文件客户端和上传文件客户端实例代码,包括了Java下http下载文件客户端和上传文件客户端实例代码的使用技巧和注意事项,需要的朋友参考一下 一、下载客户端代码 上述代码只适合下载小文件,如果下载大文件则会出现  Exception in thread "main" java.lang.OutOfMemoryError: Java heap space 错误,所以

  • 我正在Spring controller中努力实现多部分文件上传。我读过很多问题,谷歌,但似乎什么都不管用。 我明白了 我的BE控制器: FE,angularJS: HTML: 还有应用程序。属性包括: 更新: 当我按照@Byeon0gam的建议从我的控制器中删除@RequestParam时,我不再会遇到这个错误,但是我的文件在控制器中是空的。虽然在FE服务中,如我所见,它不是空的:

  • 我使用的是Jersey 2.28,想要编写一个客户端来上传1Gb的文件,而客户端JVM堆不能超过256Mb。 我在这里有什么选择? 我试着用下面的代码片段,但结果是OOM,因为Jersey似乎一直在尽可能多地从InputStream中读取数据。为了处理大量输入,可以指示球衣进行冲洗吗?

  • 我正在尝试使用Faign client上传多个多部分文件,但我无法这样做。 经过一些研究,文件上传使用Faign-多部分/表单数据 文件上传spring云虚拟客户端 数组Multipart[]文件上传使用FIGN客户端 客户端: 我正在尝试访问的模块: 上面的工程罚款为一个单一的Multipart文件,但它显示以下错误为多个文件: Servlet.service()为servlet[调度Servl

  • 我想上传一个图像到文件系统。所以我用spring-boot上传多部分文件。我还使用Advance Rest Client(Chrome)工具来Multi-part文件。但即使我没有指定任何内容类型org.apache.tomcat.util.http.fileupload,我也面临一个错误。FileUploadException:请求被拒绝,因为找不到多部分边界。 这是我的Rest控制器代码, 屏

  • 我正在使用Perl的REST::Client发出多部分POST请求: REST API 如下所示: 当我运行脚本时,出现以下错误: 解析多部分servlet请求失败;嵌套异常java.io.IOException:org.apache.tomcat.util.http.fileupload.FileUploadException:请求被拒绝,因为没有找到多部分边界] 我是perl新手,语法或其他方