2016-03-09 7 views
3

Я получаю байт [] в параметре запроса в сервлет, который я Fetching в строку, а затем снова превращающего его в байт []:написание байт [] в файл давая поврежденный файл

String encodingScheme = "UTF-8"; 
 
request.setCharacterEncoding(encodingScheme); 
 
String requestStr = request.getParameter("inputstream"); 
 
byte[] rawRequestMsg = requestStr.getBytes(encodingScheme);

Теперь этот байт [] Я пытаюсь записать в .docx-файл, поскольку этот байт [], который я использую, представляет собой только файл docx byte []. Код для написания этого в файл, как:

String uploadedFileLocation = fileLocation; 
 
FileOutputStream fileOuputStream = new FileOutputStream("path till .docx file"); 
 
fileOuputStream.write(byteArray); 
 
fileOuputStream.close();

Проблема заключается в .docx файл создается поврежден и не может открыть, но когда я изменить его .doc, то я могу открыть он, но вместо того, чтобы видеть содержание текста я вижу только байт [] последовательность там, как показано ниже:

80, 75, 3, 4, 20, 0, 6, 0, 8, 0, 0, 0, 33, 0, -84, -122, 80, 87, -114, 1, 0, 0, -64, 5, 0, 0, 19, 0, 8, 2, 91, 67, 111, 110, 116, 101, 110, 116, 95, 84, 121, 112, 101, 115, 93, 46, 120, 109, 108, 32, -94, 4, 2, 40, -96, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,

Не знаете, как правильно это записать. Нужна помощь. Спасибо, Самир

На самом деле ниже код используется для работы, которая имеет REST WebService

@ 
 
[email protected] Path("/binaryfileupload/{filename}")@ Consumes(MediaType.APPLICATION_OCTET_STREAM) 
 
public Response upload(byte[] input, @PathParam("filename") String filename) { 
 
    FileOutputStream fileOuputStream = new FileOutputStream(uploadedFileLocation); 
 
    fileOuputStream.write(input); 
 
    fileOuputStream.close(); 
 
}

Единственное изменение я сделал отсюда этот вход, который является байт [] I я отправляю сервлет и в сервлет хочу записать файл вместо того, чтобы писать в моем webservice (который работал правильно).

+0

Возможно, файл находится в формате DOC, а не в формате DOCX. Они очень разные. –

+0

Проверьте эту ссылку: http://stackoverflow.com/questions/25890776/java-bytearray-to-docx. Возможно, решение может конвертировать DOC с байтом [] в собственно DOCX. –

+0

Глядя на первые несколько байтов, это не похоже на формат DOCX или DOC. Http://www.garykessler.net/library/file_sigs.html –

ответ

0

я наконец установил ее. Я делал небольшую ошибку. В коде

String requestStr = request.getParameter("inputstream"); 
 
byte[] rawRequestMsg = requestStr.getBytes(encodingScheme);

Я на самом деле преобразование струнного в байты, даже если его уже в бай. поэтому значение requestStr отличается от rawRequestMsg. Наконец я использовал ниже код, который просто принимает строку в массив и создает байты [] от него по отдельности разделяя номер:

String requestStr = request.getParameter("inputstream"); 
 
requestStr = requestStr.substring(1, requestStr.length() - 1); 
 
String dataArray[] = requestStr.split(","); 
 
byte[] rawRequestMsg = new byte[dataArray.length]; 
 
int count = 0; 
 
for (String str: dataArray) { 
 
    str = str.trim(); 
 
    rawRequestMsg[count++] = Byte.parseByte(str); 
 
}

Функция обрезки используется для удаления пробельных, потому что его приход в 75, -84, 3 .... вот так.И подстрока используется для удаления [с начала и] с конца. Спасибо всем за то, что помогли мне. Надеюсь, это поможет кому-то.

0

Вы не пишете файл .doc. Вы просто пишете простой текстовый файл и называете его как .doc или .docx.

Чтобы он работал как файл документа с текстом, вам нужно использовать библиотеку, такую ​​как Apache POI, чтобы сделать это за вас.

Для получения дополнительной информации о Apache POI, вы можете увидеть здесь: https://poi.apache.org/

Вы можете также обратиться эту ссылку How can I create a simple docx file with Apache POI?

+0

Я думаю, что тогда проблема заключается в формате кодирования. Я думаю, что для .doc и .docx файла UTF-8 не правильный формат кодирования. См. Эту тему для получения дополнительной информации: http://stackoverflow.com/questions/28172022/character-encoding-of-microsoft-word-doc-and-docx-files –

+0

Я не думаю, что это связано с кодировкой. Потому что, когда в моем методе webservice, если я пишу одну и ту же последовательность байтов [], ее запись без каких-либо проблем. но если последовательность байтов [] я отправляю в сервлет и там, используя тот же код, я пишу в файл, чтобы он не работал должным образом. – samir

+0

, но в методе веб-службы вы не устанавливаете кодировку символов. Но в сервлете вы явно устанавливаете кодировку для UTF-8. Основное разностное кодирование воспроизводится в вашей строке для преобразования байтов. –