2016-10-04 8 views
-1

Мой файл находится в каком-то месте на моей машине, говорит C: //users//abc.txt, и я хочу написать java-программу для передачи этого файла с использованием REST API через HTTP. Я использовал MockHttpServelet запрос, чтобы создать запрос, но почему-то я не в состоянии передать файлHack для загрузки файла с Java-сервера на удаленный сервер через HTTP с помощью Rest API.

+0

Нет идеи о REST API, но я загрузил файл на сервере с MySql в качестве backend. –

+0

Не знаете, какую поддержку вы используете, это MongoDB? –

+0

Milind, автономное приложение Java работает на сервере. У меня есть функция для передачи файла из моего каталога на какой-либо сервер с помощью Rest API. Сервер принимает запрос Rest API Restquest. Я не хочу использовать какой-либо протокол, например scp для передачи файлов. Сервер будет принимать запрос только через Rest API –

ответ

0

Используйте 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(); 
} 
+0

Спасибо, Грег. Любая идея, в которой необходимо указать session/userCredentials, чтобы сервер мог разрешить доступ к ней? –

+0

Использование аутентификации - еще один вопрос. Используйте HttpClients.custom(). SetDefaultRequestConfig (requestConfig) .setDefaultCredentialsProvider (credentialsProvider). –

+0

Не повлияет ли это на производительность? Я имею в виду, когда файл открывается для передачи, JVM загрузит файл в память. Если он большой, я считаю, что проблема с производительностью. Любая идея, как этого можно избежать? –

0
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(); 
       } 
+0

Это тоже работало для меня –