我有以下问题:我有一个HttpServlet,它创建一个文件并将其返回给必须以下载形式接收的用户
byte[] byteArray = allegato.getFile();
InputStream is = new ByteArrayInputStream(byteArray);
Base64InputStream base64InputStream = new Base64InputStream(is);
int chunk = 1024;
byte[] buffer = new byte[chunk];
int bytesRead = -1;
OutputStream out = new ByteArrayOutputStream();
while ((bytesRead = base64InputStream.read(buffer)) != -1) {
out.write(buffer, 0, bytesRead);
}
如您所见,我有一个byteArray对象,它是一个字节数组(byte [] byteArray),并以这种方式将其转换为文件:
首先,我将其转换为InputStream对象。
然后,将InputStream对象转换为Base64InputStream。
最后,我写这篇文章Base64InputStream一个上ByteArrayOutputStream对象(OutputStream中出对象)。
我认为到目前为止应该没问题(是确定还是我在文件创建中缺少了某些内容?)
现在,我的servlet必须以下载的方式返回此文件(因此,用户必须将下载内容接收到浏览器中)。
那么我该怎么做才能获得这种行为?我认为我必须将此OutputStream对象放入Servlet响应中,例如:
ServletOutputStream stream = res.getOutputStream();
但是我不知道该怎么做?我是否还要为文件设置特定的MIME类型?
这很容易做到。
byte[] byteArray = //your byte array
response.setContentType("YOUR CONTENT TYPE HERE");
response.setHeader("Content-Disposition", "filename=\"THE FILE NAME\"");
response.setContentLength(byteArray.length);
OutputStream os = response.getOutputStream();
try {
os.write(byteArray , 0, byteArray.length);
} catch (Exception excp) {
//handle error
} finally {
os.close();
}
编辑:我注意到您首先从base64解码数据,您应该执行以下操作:
OutputStream os = response.getOutputStream();
byte[] buffer = new byte[chunk];
int bytesRead = -1;
while ((bytesRead = base64InputStream.read(buffer)) != -1) {
os.write(buffer, 0, bytesRead);
}
您不需要中间 ByteArrayOutputStream
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句