【问题标题】:decode base64 encoded value解码base64编码值
【发布时间】:2014-11-17 22:29:42
【问题描述】:

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

【问题讨论】:

  • 用什么打开?您如何尝试打开文件?您已下载证书验证列表。操作系统需要一个应用程序来了解如何处理它。你希望用它做什么?
  • 我不知道。有人告诉我,如果 crl 文件正确,操作系统应该知道如何打开它。 [更新]我指的是windows平台。我刚刚看到我的同事刚刚打开了示例 crl 文件就好了。但不是我试图下载的文件。我觉得有些不对劲。
  • 你使用的是什么操作系统?
  • 哪个应用程序在您的同事系统上打开了文件?如果您不知道,请显示屏幕截图。
  • 当您双击它时,您是否收到一条消息说它无效,您是否收到其他错误,或者发生了什么?请提供尽可能多的信息。如果用编辑器打开,内容是什么?

标签: java base64 decode


【解决方案1】:

所以你发送请求:

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,然后对其进行编码并发送,而不是尝试解码字符串参数。

【讨论】:

  • @CharliesS:是的,我想即时创建一个文件/有效的 crl。我将对它进行编码并测试代码。再次感谢您!
【解决方案2】:

阅读更多帖子后,我意识到了我的问题。我发布的简单逻辑工作正常,但是当我将 URL 中的原始 base64 字符串作为查询字符串的一部分传递时,我应该对值进行 url 编码,否则当 servlet 接收到数据时数据会被更改。在我对 base64 字符串进行 url 编码后,我能够下载一个有效的 crl。

下面的帖子给了我答案。

Passing base64 encoded strings in URL

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多