Преобразовать массив байтов outputtream в строку - PullRequest
0 голосов
/ 12 апреля 2019

Я пытаюсь отправить путь к файлу Rest Api через DataOutputStream.DataOutputStream преобразует строку в байты, и у меня возникают проблемы с преобразованием байта обратно в желаемую строку.Вот мой метод, который вызывает 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();
        }
    }

, а вот метод контроллера aka 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;
        }
    }

Аргумент filepath в sendFilePath () равен D:\Projects\AutoFeeChallan\Aptech Student Records.xlsx

, в то время кактот, который я получаю в uploadApi после преобразования в String: D%3A%5CProjects%5CAutoFeeChallan%5CAptech+Student+Records.xlsx=

Мне нужен тот же путь в методе контроллера, который я посылаю в качестве аргумента в sendFilePath ().Можете ли вы предложить какое-либо решение или другие методы для решения этой проблемы.

1 Ответ

0 голосов
/ 12 апреля 2019

По настройке,

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

Вы закодировали URL-адрес данных. В какой-то момент вам необходимо его кодировать.

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

Или вы можете изменить тип контента на другой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...