我想在数据库中读取Blob内容存储库,并在java中以CSV格式将其写入HttpServletResponse。当我尝试将存储在Blob中的CSV内容的byte []写入响应时,CSV文件内容已损坏。
如果您有任何想法,请建议。
由于
答案 0 :(得分:0)
以下是我的表现:
private static void sendResponse(Connection con, long id,
HttpServletResponse resp, String filename) {
try (PreparedStatement stmt = con.prepareStatement(
"select CONTENT_TYPE,CONTENT "
+ "from CONTENT_TABLE "
+ "where ID=?")) {
int ix = 0;
stmt.setLong(++ix, id);
try (ResultSet rs = stmt.executeQuery()) {
if (rs.next()) {
String type = rs.getString(1);
Blob result = rs.getBlob(2);
if (result != null) {
try (InputStream in = result.getBinaryStream()) {
resp.setContentType(type);
resp.setCharacterEncoding("ISO-8859-1");
resp.setHeader("Content-Disposition",
"attachment;filename=" + filename);
resp.setHeader("Cache-Control", "public");
resp.setHeader("Pragma","");
OutputStream out = resp.getOutputStream();
try {
byte buf[] = new byte[4096];
for (int n = in.read(buf); n > 0; n = in.read(buf)) {
out.write(buf, 0, n);
}
} finally {
out.close();
}
}
}
}
}
} catch (SQLException | IOException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
}
答案 1 :(得分:0)
我认为最简单的方法是将二进制数据转换为Base 64字符串表示。
Apache commons codec为您做到了这一点:
只需使用:
byte[] binaryData = someMethodToReadYourFileIntoBytes();
String encodedData = Base64.encodeBase64String(binaryData);`
//now just write that to your CSV output.
有关如何进行操作的更多信息和其他选项,请参阅javadoc。
希望它有所帮助。