【发布时间】:2016-06-23 12:18:44
【问题描述】:
我在 servlet 的请求参数中获取 byte[],我在字符串中获取该参数,然后再次将其转换为 byte[]:
String encodingScheme = "UTF-8";
request.setCharacterEncoding(encodingScheme);
String requestStr = request.getParameter("inputstream");
byte[] rawRequestMsg = requestStr.getBytes(encodingScheme);
现在这个 byte[] 我正在尝试写入 .docx 文件,因为我正在使用的这个 byte[] 只是 docx 文件的 byte[] 表示。将其写入文件的代码如下:
String uploadedFileLocation = fileLocation;
FileOutputStream fileOuputStream = new FileOutputStream("path till .docx file");
fileOuputStream.write(byteArray);
fileOuputStream.close();
问题是正在创建的 .docx 文件已损坏且无法打开,但是当我将其更改为 .doc 时,我可以打开它,但我看不到文本内容,而只看到 byte[] 序列,如下所示:
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 web 服务的工作
@
POST@ 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();
}
我所做的唯一更改是从这里输入字节 [] 我发送到 servlet 并且在 servlet 中想要写入文件而不是写入我的 web 服务(它工作正常)。
【问题讨论】:
-
文件可能是 DOC 格式而不是 DOCX 格式。它们非常不同。
-
查看此链接:stackoverflow.com/questions/25890776/java-bytearray-to-docx。也许那里的解决方案可以将带有 byte[] 的 DOC 正确地转换为 DOCX。
-
看前几个字节,这似乎不是 DOCX 或 DOC 格式garykessler.net/library/file_sigs.html
-
您似乎将输入流解释为 UTF-8 ......但这实际上是您输入的编码格式吗?例如,您是否有可能接收到 GZIP 编码的字节流作为实际输入?
-
我已经用更多信息编辑了帖子,排除了不正确的文档格式 UTF-8 GZIP 编码等的可能性。
标签: java file file-io bytearray file-writing