解码base64编码的值

时间:2014-11-17 22:29:42

标签: java base64 decode

我有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,我没有在示例中包含任何异常处理。

2 个答案:

答案 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。

以下帖子给了我答案。

Passing base64 encoded strings in URL