我有base64编码值的文件(x509crl)的内容。我向一个servlet发出了GET请求。通过在浏览器文件中粘贴以下URL,弹出下载对话框。
"http://host:port/myServlet?content=base64_encoded_value"
我能够下载文件,但无法打开文件。根据我工作室的pki专家的说法,如果crl文件的内容是正确的,那么操作系统应该打开它就好了。
这是我的servlet类中的doGet方法。我想知道我犯了什么错误。
protected void doGet(HttpServletRequest request, HttpServletResponse response) {
String content = request.getParameter("content");
response.setContentType("application/pkix-crl");
response.setHeader("Content-Disposition","attachment;filename=test.crl");
byte[] byteArray = Base64.decodeBase64(content.getBytes());
ServletOutputStream sos = response.getOutputStream();
sos.write(byteArray);
sos.close();
}
我使用的是commons-codec-1.3,我没有在示例中包含任何异常处理。
答案 0 :(得分:0)
所以你发送请求:
http://host:port/myServlet?content=base64_encoded_value
由servlet中的方法使用:
protected void doGet(HttpServletRequest request, HttpServletResponse response) {
让我们看看你在做什么:
String content = request.getParameter("content");
似乎字符串内容现在将包含“base64_encoded_value” 接下来,告诉客户我们发送的是什么,似乎是合理的。
response.setContentType("application/pkix-crl");
response.setHeader("Content-Disposition","attachment;filename=test.crl");
然后我们这样做:
byte[] byteArray = Base64.decodeBase64(content.getBytes());
这似乎是尝试将字符串“base64_encoded_value”转换为字节然后解码它们。它们不是base64编码的,所以byteArray可能什么都没有。 其余部分在响应中没有写入输出流。
ServletOutputStream sos = response.getOutputStream();
sos.write(byteArray);
sos.close();
}
我猜你实际上想要读取文件或动态创建有效的crl,然后编码并发送它,而不是尝试解码字符串参数。
答案 1 :(得分:0)
阅读更多主题后,我意识到了我的问题。我发布的简单逻辑正常工作但是当我在URL中传递raw base64字符串作为查询字符串的一部分时,我应该对该值进行url编码,否则当servlet接收到数据时会更改数据。在我对url编码的base64字符串后,我能够下载一个有效的crl。
以下帖子给了我答案。