Servlets 不能';t打开从httpservletrequest下载的图像并保存在本地光盘中
这是我用来下载图片并保存的代码。有人能建议我还需要做什么或者我在这里错过了什么吗??提前谢谢Servlets 不能';t打开从httpservletrequest下载的图像并保存在本地光盘中,servlets,Servlets,这是我用来下载图片并保存的代码。有人能建议我还需要做什么或者我在这里错过了什么吗??提前谢谢 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { BufferedWriter writer = null; InputStream in = new BufferedInputStream(re
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
BufferedWriter writer = null;
InputStream in = new BufferedInputStream(request.getInputStream());
try {
byte[] buffer = new byte[100000];
int n = -1;
while ((n = in.read(buffer)) >= 0) {
out.write(buffer, 0, n); // used for image
}
out.close();
byte[] res = out.toByteArray();
out.flush();
FileOutputStream fos = new FileOutputStream("D://"+ new SimpleDateFormat("yyyyMMdd_HHmmssss").format(Calendar.getInstance().getTime()) +".jpg");
fos.write(res);
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
可能是因为您没有设置响应标题和内容类型。请尝试此操作
protected void doGet( HttpServletRequest request,HttpServletResponse response)
{
try {
Path path = Paths.get("c:\\test.jpg");
response.setHeader("Content-Length", ""+Files.size(path));
response.setContentType("image/jpeg");
response.setHeader("Content-Disposition", "attachment; filename=\""+path.getFileName()+"\";");
ServletOutputStream outputStream;
outputStream = response.getOutputStream();
byte[] data = Files.readAllBytes(path);
outputStream.write(data);
} catch (IOException ex) {ex.printStackTrace();}
}
我找到了一个基于多部分/表单数据的解决方案,因为服务器应该能够处理多部分/表单数据。为此我必须
private static final MultipartConfigElement MULTI_PART_CONFIG = new MultipartConfigElement(
System.getProperty("java.io.tmpdir"));
在处理器内部
也
内部句柄方法
然后我们可以从请求中获取文件,如下所示
@Override
public void handle(String target, Request baseRequest,
HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
if (request.getContentType() != null
&& request.getContentType().startsWith("multipart/form-data")) {
baseRequest.setAttribute(Request.__MULTIPART_CONFIG_ELEMENT,
MULTI_PART_CONFIG);
}
// response.setContentType("text/html;charset=utf-8");
response.setStatus(HttpServletResponse.SC_OK);
baseRequest.setHandled(true);
final FileOutputStream output = new FileOutputStream("D:\\Dir\\"+ request.getParameter("imageName") + ".jpg");
IOUtils.copy(request.getPart("file").getInputStream(), output);
output.close();
}
这里的IOUtils来自apache commons io jar文件@Manish我不想在程序中打开,只是在文件系统中打开保存的文件,但是photo viewer无法打开图片。如果您想从servlet下载文件,您必须将字节[]作为servlet响应写入。检查此项并
@Override
public void handle(String target, Request baseRequest,
HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
if (request.getContentType() != null
&& request.getContentType().startsWith("multipart/form-data")) {
baseRequest.setAttribute(Request.__MULTIPART_CONFIG_ELEMENT,
MULTI_PART_CONFIG);
}
// response.setContentType("text/html;charset=utf-8");
response.setStatus(HttpServletResponse.SC_OK);
baseRequest.setHandled(true);
final FileOutputStream output = new FileOutputStream("D:\\Dir\\"+ request.getParameter("imageName") + ".jpg");
IOUtils.copy(request.getPart("file").getInputStream(), output);
output.close();
}