将txt文件发布到远程HTTP服务器

时间:2017-05-04 05:46:23

标签: java http post

我对这个问题有点失落,需要一些帮助。我需要做的是使用Java向HTTP REST接口发出post请求。在此请求中,我需要将密钥作为参数发送,并需要将文本文件上载到服务器。该文件将在本地提供。

这里没有任何用户输入。我不知道如何将文件上传到该服务器在说明页面中写的是

此步骤需要对URI" someurl.com"

的HTTP Post请求
  • 使用名为key的HTTP Post变量及其值
  • 和附加的in.txt文件

发出此请求后,我会收到一个out.txt文件作为回复。

到目前为止,通过互联网我发现这个代码很接近

 dos.writeBytes(message); //here message is String and dos is DataOutputStream
        dos.flush(); 
        dos.close();

但是这里的消息是字符串,我想知道是否有办法将文件发送到服务器。

3 个答案:

答案 0 :(得分:0)

您可以使用此方法上传包含一些键和值参数的文件

CloseableHttpClient httpClient = HttpClients.createDefault();
    HttpPost uploadFile = new HttpPost("someurl.com");
    //Post variable named key and its value
    MultipartEntityBuilder builder = MultipartEntityBuilder.create();
    builder.addTextBody("id", id, ContentType.TEXT_PLAIN);
    builder.addTextBody("apd", apd, ContentType.TEXT_PLAIN);

    //path of file
    String filepath = "C:\Users\Downloads\images\file.txt";     
    // This attaches the file to the POST:
    File f = new File(filepath);
    builder.addBinaryBody(
        "file",
        new FileInputStream(f),
        ContentType.APPLICATION_OCTET_STREAM,
        f.getName()
    );

    HttpEntity multipart = builder.build();
    uploadFile.setEntity(multipart);
    CloseableHttpResponse response = httpClient.execute(uploadFile);
    HttpEntity responseEntity = response.getEntity();

答案 1 :(得分:0)

伙计们,感谢您的答案,但他们并没有为我工作。我没有太多这种API的经验。在帮助部分,我发现使用curl并且能够成功获得结果。这是我使用的代码

String[] command = {"curl","-H","key:keyValue","-F","file=@in.txt",
                   "http://example.com/evaluate.php ","-o","output.txt"};
ProcessBuilder process = new ProcessBuilder(command); 
Process p;
p = process.start();

答案 2 :(得分:-1)

在按摩参数中是的,您需要序列化文件 - 将其转换为字节,加密它。然后将其作为消息发送。然后从另一侧的字节解密并构建您的文件