在有些场景中,我们需要发送一个二进制文件进行请求,比如发送一张图片进行检测,在Postman中可以直接模拟请求,那么在Java中,如何实现呢,话不多说,直接上代码:
public static String checkModelStatus(String urlString)
throws IOException {
String TEST_IMAGE_PATH = "/imagepath/test.jpg";
URL url = new URL(urlString);
URLConnection connection = url.openConnection();
connection.setDoOutput(true);
String authStr = "user"+":"+"passwowrd;
System.out.println("Original String is " + authStr);
// encode data on your side using BASE64
byte[] bytesEncoded = Base64.encodeBase64(authStr .getBytes());
String authEncoded = new String(bytesEncoded);
connection.setRequestProperty("Authorization", "Basic "+authEncoded);
//try里面拿到输出流,输出端就是服务器端
try (BufferedOutputStream bos = new BufferedOutputStream(connection.getOutputStream())) {
//我java代码是在Windows上运行的,图片路径就是下面这个
InputStream is = new FileInputStream(TEST_IMAGE_PATH);
BufferedInputStream bis = new BufferedInputStream(is);
byte[] buf= new byte[1024];
int length = 0;
length = bis.read(buf);
while(length!=-1) {
bos.write(buf, 0, length);
length = bis.read(buf);
}
bis.close();
is.close();
bos.close();
}
//下面是服务器端如果有返回数据的话,做接收用的
StringBuilder response = new StringBuilder();
try (Scanner in = new Scanner(connection.getInputStream())) {
while (in.hasNextLine()) {
response.append(in.nextLine());
// response.append("\n");
}
} catch (IOException e) {
if (!(connection instanceof HttpURLConnection))
throw e;
InputStream err = ((HttpURLConnection) connection).getErrorStream();
if (err == null)
throw e;
Scanner in = new Scanner(err);
response.append(in.nextLine());
// response.append("\n");
in.close();
}
return response.toString();
}
使用上面的代码就可以发送一个二进制的数据了