将输出流字节数组转换为字符串

时间:2019-04-12 09:55:35

标签: java spring-boot

我正在尝试通过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()中作为参数发送的路径相同。 您能提出解决此问题的任何解决方案或其他方法吗?

1 个答案:

答案 0 :(得分:0)

通过设置,

connection.setRequestProperty("Content-Type", "application/x-www- 
      form-urlencoded"); 

您已对数据URL进行了编码。在某些时候,您需要对其进行url解码。

String filePath = java.net.URLDecoder.decode(baos.toString(), StandardCharsets.UTF_8);

或者您可以将内容类型更改为另一种。