我在servlet中的request参数中获取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();
}
只有我做的更改是从这里输入的是byte []我发送给servlet并且在servlet中想写文件而不是写在我的webservice(这是正常工作)。
答案 0 :(得分:0)
您没有编写.doc文件。您只需编写一个简单的文本文件并将其命名为.doc或.docx。
要使它作为word文档文件工作,您需要使用Apache POI等库来为您完成。
有关Apache POI的更多信息,您可以在此处看到:https://poi.apache.org/
您也可以参考此链接How can I create a simple docx file with Apache POI?
答案 1 :(得分:0)
我终于修好了。我犯了一个小错误。在代码中
String requestStr = request.getParameter("inputstream");
byte[] rawRequestMsg = requestStr.getBytes(encodingScheme);
我实际上将String转换为字节,即使它已经在字节中。这就是为什么requestStr的值与rawRequestMsg不同的原因。最后我使用下面的代码,它简单地将字符串带入数组,并通过单独分隔每个数字来创建byte []:
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);
}
trim函数用于删除空格,因为它像75,-84,3 ......这样。子字符串用于从开头和结尾删除[从开始和]。 谢谢大家帮助我。 希望这有助于某人。