我对这个问题有点失落,需要一些帮助。我需要做的是使用Java向HTTP REST接口发出post请求。在此请求中,我需要将密钥作为参数发送,并需要将文本文件上载到服务器。该文件将在本地提供。
这里没有任何用户输入。我不知道如何将文件上传到该服务器在说明页面中写的是
此步骤需要对URI" someurl.com"
的HTTP Post请求发出此请求后,我会收到一个out.txt文件作为回复。
到目前为止,通过互联网我发现这个代码很接近
dos.writeBytes(message); //here message is String and dos is DataOutputStream
dos.flush();
dos.close();
但是这里的消息是字符串,我想知道是否有办法将文件发送到服务器。
答案 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)
在按摩参数中是的,您需要序列化文件 - 将其转换为字节,加密它。然后将其作为消息发送。然后从另一侧的字节解密并构建您的文件