使用 Rest API 通过 HTTP 将文件从 Java 后端上传到远程服务器。

Hack to upload a file from Java backend to a remote server over HTTP using Rest API.

我的文件驻留在我机器上的某个位置,例如 C://users//abc.txt,我想编写一个 java 程序来使用 REST API 传输该文件通过 HTTP。我使用 MockHttpServelet Request 来创建请求,但不知何故我无法传输文件

使用HttpClient:

String url = "http://localhost:8080/upload"; // Replace with your target 'REST API' url
String filePath = "C://users//abc.txt";

CloseableHttpClient httpClient = HttpClients.createDefault();
try {
    HttpPost httpPost = new HttpPost(url);
    FileEntity entity = new FileEntity(new File(filePath), ContentType.TEXT_PLAIN);
    httpPost.setEntity(entity);

    HttpResponse httpResponse = httpClient.execute(httpPost);
    System.out.println(httpResponse.getStatusLine().getStatusCode()); // Check HTTP code
} finally {
    httpClient.close();
}

有身份验证:

String url = "http://localhost:8080/upload"; // Replace with your target 'REST API' url
String filePath = "C://users//abc.txt";
String username = "username"; // Replace with your username
String password = "password"; // Replace with your password

RequestConfig requestConfig =
  RequestConfig.custom().
    setAuthenticationEnable(true).
    build();

CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
credentialsProvider.setCredentials(
  AuthScope.ANY,
  new UsernamePasswordCredential(username, password));

CloseableHttpClient httpClient =
  HttpClients.custom().
    setDefaultRequestConfig(requestConfig).
    setDefaultCredentialsProvider(credentialsProvider).
    build();
try {
    HttpPost httpPost = new HttpPost(url);
    FileEntity entity = new FileEntity(new File(filePath), ContentType.TEXT_PLAIN);
    httpPost.setEntity(entity);

    HttpResponse httpResponse = httpClient.execute(httpPost);
    System.out.println(httpResponse.getStatusLine().getStatusCode()); // Check HTTP code
} finally {
    httpClient.close();
}
String location="C:\Usersabc.img";
Path path = Paths.get(location);
String name=location.substring(location.lastIndexOf("\")+1);
 MultipartEntity multipart= new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);                
    try {
    multipart.addPart("image", new ByteArrayBody(Files.readAllBytes(path),  ContentType.APPLICATION_OCTET_STREAM.getMimeType(),name));                 
        }
        catch (IOException ex) {
                    // TODO Auto-generated catch block
                    ex.printStackTrace();
                }