gpt4 book ai didi

java - base64 到文件响应不起作用

转载 作者:太空宇宙 更新时间:2023-11-04 06:07:16 25 4
gpt4 key购买 nike

由于开发限制,我们将所有以 Base64 格式从客户端发送到服务器的数据,以及上传的文件(pdf 或 txt 文件)。在 java 中执行此过程后,这些文件将作为 LONGBLOB 正确存储在 mysql 数据库中:

decoder = new BASE64Decoder();
decodedBytes = decoder.decodeBuffer(request.getParameter("fic_adjunto"));
ficheroAdjunto = new SerialBlob(decodedBytes);

但是当我想从 jsp 下载一些文件时,我使用带有 html 链接的 servlet 代码:

jsp 文件:

<a href='GestionDescargas?valor=LoadFile&IdEvent=26'>

服务器端:

Conexion oConexion = new Conexion();

            Evento oEvento = new Evento();
oEvento = oConexion.RecuperaEventoByIdEvento(Integer.parseInt(request.getParameter("IdEvent")));

response.setHeader("Expires", "0");
response.setHeader("Cache-Control","must-revalidate, post-check=0, pre-check=0");
response.setHeader("Pragma", "public");
response.setContentType("application/pdf");
response.setHeader("Content-Disposition", "attachment;filename=" + oEvento.getNomFicheroAdjunto());

Blob fileBlob = oEvento.getFicheroAdjunto();
int blobLength = (int) fileBlob.length();
byte[] blobAsBytes = fileBlob.getBytes(1, blobLength);
String base64String = Base64.encodeBase64String(blobAsBytes);

InputStream is = new ByteArrayInputStream(base64String.getBytes("UTF-8"));

int read=0;
byte[] bytes = new byte[BYTES_DOWNLOAD];
OutputStream os = response.getOutputStream();

while((read = is.read(bytes))!= -1)
{
os.write(bytes, 0, read);
}
os.flush();
os.close();

我在这个编程世界中还是个新手,你能帮我一下吗?我已经尝试了所有方法,但只得到了base64字符串(甚至不等于原始字符串,但几乎)

原始base64字符串:

data:text/plain;base64,VGFibGEgZGUgaGlzdG9yaWNvIGNhdGVnb3LtYXMgeSBkZSBwcm9kdWN0b3MsIHBhcmEgZWwgY2llcnJlIGRlZmluaXRpdm8gZGVsIGV2ZW50by4NCg0KQWwgZWxpbWluYXIgdW5hIGNhdGVnb3JpYSwgc2UgZWxpbWluYW4gdG9kb3Mgc3VzIHByb2R1Y3Rvcy4NCg0KQWwgZWxpbWluYXIgdW4gcHJvZHVjdG8sIHNlIGVsaW1pbmEgZGUgdG9kb3MgbG9zIHNpdGlvcyBlbiBsb3MgcXVlIGVzdOkgc2llbmRvIHVzYWRvLg0KDQoJLVNlIGVsaW1pbmEgZGVsIGFsbWFj6W4uDQoJLVNlIGVsaW1pbmEgZGUgbGFzIHBsYW50aWxsYXMuIChzYW1jYXQucGxhbnRpbGxhX3Byb2R1Y3RvKQ0KCS1TZSBlbGltaW5hIGRlbCBzaXN0ZW1hIGRlIGdlc3Rpb24gZGUgYWxlcnRhcy4gKHNhbWNhdC5hbGVydGFfcmVzZXJ2YSkNCgktU2UgZWxpbWluYSBkZSBsb3MgZXZlbnRvcyBubyBGSU5BTElaQURPUyArIFBvc2libGVzIHJvdHVyYXMgKyBBQ1RVQUxJWkFDSdNOIFBSRUNJTyBGSU5BTCAoc2FtY2F0LnBlcmRpZGFfZXZlbnRvLCBzYW1jYXRfcHJvZHVjdG9fZXZlbnRvKQ0KDQoNCg0KQWxlcnRhcywgc29sbyB1bmEgdmV6IGVsIG1pc21vIHByb2R1Y3RvIHBvciBhbGVydGE=

从数据库字符串解码:

data/text/plain/base64/VGFibGEgZGUgaGlzdG9yaWNvIGNhdGVnb3LtYXMgeSBkZSBwcm9kdWN0b3MsIHBhcmEgZWwgY2llcnJlIGRlZmluaXRpdm8gZGVsIGV2ZW50by4NCg0KQWwgZWxpbWluYXIgdW5hIGNhdGVnb3JpYSwgc2UgZWxpbWluYW4gdG9kb3Mgc3VzIHByb2R1Y3Rvcy4NCg0KQWwgZWxpbWluYXIgdW4gcHJvZHVjdG8sIHNlIGVsaW1pbmEgZGUgdG9kb3MgbG9zIHNpdGlvcyBlbiBsb3MgcXVlIGVzdOkgc2llbmRvIHVzYWRvLg0KDQoJLVNlIGVsaW1pbmEgZGVsIGFsbWFj6W4uDQoJLVNlIGVsaW1pbmEgZGUgbGFzIHBsYW50aWxsYXMuIChzYW1jYXQucGxhbnRpbGxhX3Byb2R1Y3RvKQ0KCS1TZSBlbGltaW5hIGRlbCBzaXN0ZW1hIGRlIGdlc3Rpb24gZGUgYWxlcnRhcy4gKHNhbWNhdC5hbGVydGFfcmVzZXJ2YSkNCgktU2UgZWxpbWluYSBkZSBsb3MgZXZlbnRvcyBubyBGSU5BTElaQURPUyArIFBvc2libGVzIHJvdHVyYXMgKyBBQ1RVQUxJWkFDSdNOIFBSRUNJTyBGSU5BTCAoc2FtY2F0LnBlcmRpZGFfZXZlbnRvLCBzYW1jYXRfcHJvZHVjdG9fZXZlbnRvKQ0KDQoNCg0KQWxlcnRhcywgc29sbyB1bmEgdmV6IGVsIG1pc21vIHByb2R1Y3RvIHBvciBhbGVydGA==

我想要的是无论如何获取原始文件......而不是base64字符串。

非常感谢!!!!

最佳答案

也许问题与您发送文件的方式有关,例如,如果文件使用 iso-8859-1 编码,您需要执行下一步操作(因为您使用 UTF-8 读取 BLOB):

decoder = new BASE64Decoder();
decodedBytes = decoder.decodeBuffer(new String(request.getParameter("fic_adjunto").getBytes("iso-8859-1"), "UTF-8"));
ficheroAdjunto = new SerialBlob(decodedBytes);

仅当您以 iso-8859-1 格式发送文件时,上面的代码才有用,为避免这种情况(重新格式化字符串),您需要强制请求以 UTF-8 格式发送。

关于java - base64 到文件响应不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29158726/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com