我正在尝试通过DataOutputStream将文件路径发送到Rest Api。 DataOutputStream将字符串转换为字节,我在将字节转换回所需的String时遇到麻烦。 这是我调用Api的方法
private void sendFilePath(String filePath) {
try {
URL url = new URL("http://localhost:8080/uploadExcelFile");
HttpURLConnection connection = (HttpURLConnection)
url.openConnection();
connection.setRequestMethod("POST");
connection.setRequestProperty("Content-Type", "application/x-www-
form-urlencoded");
connection.setDoOutput(true);
connection.setDoInput(true);
DataOutputStream outputStream = new
DataOutputStream(connection.getOutputStream());
outputStream.writeBytes(filePath);
outputStream.flush();
outputStream.close();
connection.getResponseCode();
} catch (IOException e) {
e.printStackTrace();
}
}
这是又名Api的控制器方法
@PostMapping("/uploadExcelFile")
public HttpStatus uploadFile(@RequestBody byte[] byteFilePath) {
try {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
baos.write(byteFilePath);
String filePath = baos.toString();
Workbook workbook = WorkbookFactory.create(new File(filePath));
List<StudentModel> students = studentService.convertExcelToData(workbook);
return studentHandler.createStudent(students);
} catch (InvalidFormatException | IOException e) {
e.printStackTrace();
return HttpStatus.BAD_REQUEST;
}
}
sendFilePath()中的filepath参数为D:\Projects\AutoFeeChallan\Aptech Student Records.xlsx
当我转换为String之后进入uploadApi的那个是D%3A%5CProjects%5CAutoFeeChallan%5CAptech+Student+Records.xlsx=
我希望控制器方法中的路径与在sendFilePath()中作为参数发送的路径相同。 您能提出解决此问题的任何解决方案或其他方法吗?
答案 0 :(得分:0)
通过设置,
connection.setRequestProperty("Content-Type", "application/x-www-
form-urlencoded");
您已对数据URL进行了编码。在某些时候,您需要对其进行url解码。
String filePath = java.net.URLDecoder.decode(baos.toString(), StandardCharsets.UTF_8);
或者您可以将内容类型更改为另一种。