Мой файл находится в каком-то месте на моей машине, говорит C: //users//abc.txt, и я хочу написать java-программу для передачи этого файла с использованием REST API через HTTP. Я использовал MockHttpServelet запрос, чтобы создать запрос, но почему-то я не в состоянии передать файлHack для загрузки файла с Java-сервера на удаленный сервер через HTTP с помощью Rest API.
ответ
Используйте 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();
}
Спасибо, Грег. Любая идея, в которой необходимо указать session/userCredentials, чтобы сервер мог разрешить доступ к ней? –
Использование аутентификации - еще один вопрос. Используйте HttpClients.custom(). SetDefaultRequestConfig (requestConfig) .setDefaultCredentialsProvider (credentialsProvider). –
Не повлияет ли это на производительность? Я имею в виду, когда файл открывается для передачи, JVM загрузит файл в память. Если он большой, я считаю, что проблема с производительностью. Любая идея, как этого можно избежать? –
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();
}
Это тоже работало для меня –
Нет идеи о REST API, но я загрузил файл на сервере с MySql в качестве backend. –
Не знаете, какую поддержку вы используете, это MongoDB? –
Milind, автономное приложение Java работает на сервере. У меня есть функция для передачи файла из моего каталога на какой-либо сервер с помощью Rest API. Сервер принимает запрос Rest API Restquest. Я не хочу использовать какой-либо протокол, например scp для передачи файлов. Сервер будет принимать запрос только через Rest API –