JSP如何上传图片
4个回答
2013-08-07
展开全部
请几天写了一个、代码给你看看、说明下:这有两个文件夹、都在Web容器(Tomcat)的根目录下、一个临时文件夹、一个保存上传文件的文件夹、
UploadFile.java-----用于上传的servlet
public class UploadFile extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request, response); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setCharacterEncoding("GBK"); response.setContentType("text/html"); PrintWriter out = response.getWriter(); // 允许上传的文件格式的列表 final String[] allowedExt = new String[] { "jpg", "jpeg", "gif" }; // 这里对request进行封装,RequestContext提供了对request多个访问方法 RequestContext requestContext = new ServletRequestContext(request); // 判断表单是否是Multipart类型的 if (FileUpload.isMultipartContent(requestContext)) { // 实例化一个硬盘工厂 DiskFileItemFactory factory = new DiskFileItemFactory(); // 设置缓存区的大小 factory.setSizeThreshold(1024 * 1024); // 设置目标临时文件夹 String temp=this.getServletContext().getRealPath("/") + "FileTemp"; // 设置目标文件夹路径 String path = this.getServletContext().getRealPath("/") + "File"; // 设置上传文件夹路径 factory.setRepository(new File(temp)); // 上传组件 ServletFileUpload upload = new ServletFileUpload(factory); // 设置文件上传的大小 upload.setFileSizeMax(3 * 1024 * 1024); List<FileItem> fileList = null; try { // 获取文件列表 fileList = upload.parseRequest(request); } catch (FileUploadException e) { if (e instanceof SizeLimitExceededException) { out.println("文件尺寸超过规定大小:" + 3 * 1024 * 1024 + "字节<p/>"); return; } e.printStackTrace(); } // 得到所有上传文件 Iterator<FileItem> it = fileList.iterator(); while (it.hasNext()) { // 得到系统时间 long now = System.currentTimeMillis(); // 将long类型转换为String类型 String prefix = String.valueOf(now); FileItem fileItem = (FileItem) it.next(); // 得到文件的后缀 String postfix = fileItem.getName().substring( fileItem.getName().lastIndexOf(".") + 1); // 拒绝接受规定文件格式之外的文件类型 int allowFlag = 0; int allowedExtCount = allowedExt.length; for (; allowFlag < allowedExtCount; allowFlag++) { if (allowedExt[allowFlag].equals(postfix)) break; } if (allowFlag == allowedExtCount) { out.println("请上传以下类型的文件<p />"); for (allowFlag = 0; allowFlag < allowedExtCount; allowFlag++) out.println("*." + allowedExt[allowFlag] + " "); return; } // 保存文件,其实就是把缓存里的数据写到目标路径下 File newFile = new File(path + "/" + prefix + "." + postfix); // 文件列表为空 if (fileItem.getName() == null || fileItem.getName() == "") { out.println("请选择上传文件<p />"); } try { if (newFile.createNewFile()) fileItem.write(newFile); } catch (Exception e) { e.printStackTrace(); } out.println("文件上传成功. 已保存为: " + prefix + "." + postfix + " 文件大小:" + fileItem.getSize() + "字节<p />"); } } out.flush(); out.close(); }}由于篇幅太长、有些代码已省去、至于储存图片名到数据、这个很简单、、那里已经取到文件名、插入到数据库应该很简单、这里我不副累赘、再赠送两个、一个下载、一个删除、知道就跳过吧、
DownloadFile.java-------用于下载的servlet
public class DownloadFile extends HttpServlet {
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { FileBiz fileBiz = new FileBiz(); request.setCharacterEncoding("GBK"); // 获取要下载的文件名 String fileName = request.getParameter("filename"); // 获取文件的绝对路径 String fileDir = this.getServletContext().getRealPath("/File"); /** 设置MS下载页头 */ response.setContentType("application/x-msdownload"); response.setHeader("Content-Disposition", "attachment;" + " fileame=" + fileName); //把方法写在另一个类里面了、 fileBiz.download(response.getOutputStream(), fileDir, fileName); }} //下载文件 public void download(OutputStream os, String fileDir,String fileName) { try { InputStream is = new FileInputStream(fileDir + "/" + fileName); int hasRead = 0; byte[] buffer = new byte[4096]; while ((hasRead = is.read(buffer, 0, buffer.length)) != -1) { os.write(buffer, 0, hasRead); } os.flush(); os.close(); is.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { System.out.println("下载中文件数据传输出错"); e.printStackTrace(); } }
下载没什么好说的、注意传过来的filename就行了、
DeleteFile.java------用于删除的servletpublic class DeleteFile extends HttpServlet { public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setCharacterEncoding("GBK"); response.setContentType("text/html"); PrintWriter out = response.getWriter(); // 获取要删除的文件名 String fileName = request.getParameter("filename"); // 获取文件的绝对路径 String fileDir = this.getServletContext().getRealPath("/File"); if(fileBiz.delete(fileDir,fileName)) out.println("删除成功"); else out.println("删除失败"); }} //删除文件 public boolean delete(String fileDir,String fileName){ return new File(fileDir+"/"+fileName).delete(); }
删除文件更简单、一行代码的事情、
其实这些都是基于流的操作、还有很过方法等着我们去尝试吧、
至于jar包的话、安装时应该有、没有百度一下、到处都是、还有一种方式上传、下载、没试过、用的是jspSmartUpload包、有时间研究研究、
代码有点多、多点乱、但、也没办法了、希望你能看明白、
就这样了、祝你好运、
UploadFile.java-----用于上传的servlet
public class UploadFile extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request, response); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setCharacterEncoding("GBK"); response.setContentType("text/html"); PrintWriter out = response.getWriter(); // 允许上传的文件格式的列表 final String[] allowedExt = new String[] { "jpg", "jpeg", "gif" }; // 这里对request进行封装,RequestContext提供了对request多个访问方法 RequestContext requestContext = new ServletRequestContext(request); // 判断表单是否是Multipart类型的 if (FileUpload.isMultipartContent(requestContext)) { // 实例化一个硬盘工厂 DiskFileItemFactory factory = new DiskFileItemFactory(); // 设置缓存区的大小 factory.setSizeThreshold(1024 * 1024); // 设置目标临时文件夹 String temp=this.getServletContext().getRealPath("/") + "FileTemp"; // 设置目标文件夹路径 String path = this.getServletContext().getRealPath("/") + "File"; // 设置上传文件夹路径 factory.setRepository(new File(temp)); // 上传组件 ServletFileUpload upload = new ServletFileUpload(factory); // 设置文件上传的大小 upload.setFileSizeMax(3 * 1024 * 1024); List<FileItem> fileList = null; try { // 获取文件列表 fileList = upload.parseRequest(request); } catch (FileUploadException e) { if (e instanceof SizeLimitExceededException) { out.println("文件尺寸超过规定大小:" + 3 * 1024 * 1024 + "字节<p/>"); return; } e.printStackTrace(); } // 得到所有上传文件 Iterator<FileItem> it = fileList.iterator(); while (it.hasNext()) { // 得到系统时间 long now = System.currentTimeMillis(); // 将long类型转换为String类型 String prefix = String.valueOf(now); FileItem fileItem = (FileItem) it.next(); // 得到文件的后缀 String postfix = fileItem.getName().substring( fileItem.getName().lastIndexOf(".") + 1); // 拒绝接受规定文件格式之外的文件类型 int allowFlag = 0; int allowedExtCount = allowedExt.length; for (; allowFlag < allowedExtCount; allowFlag++) { if (allowedExt[allowFlag].equals(postfix)) break; } if (allowFlag == allowedExtCount) { out.println("请上传以下类型的文件<p />"); for (allowFlag = 0; allowFlag < allowedExtCount; allowFlag++) out.println("*." + allowedExt[allowFlag] + " "); return; } // 保存文件,其实就是把缓存里的数据写到目标路径下 File newFile = new File(path + "/" + prefix + "." + postfix); // 文件列表为空 if (fileItem.getName() == null || fileItem.getName() == "") { out.println("请选择上传文件<p />"); } try { if (newFile.createNewFile()) fileItem.write(newFile); } catch (Exception e) { e.printStackTrace(); } out.println("文件上传成功. 已保存为: " + prefix + "." + postfix + " 文件大小:" + fileItem.getSize() + "字节<p />"); } } out.flush(); out.close(); }}由于篇幅太长、有些代码已省去、至于储存图片名到数据、这个很简单、、那里已经取到文件名、插入到数据库应该很简单、这里我不副累赘、再赠送两个、一个下载、一个删除、知道就跳过吧、
DownloadFile.java-------用于下载的servlet
public class DownloadFile extends HttpServlet {
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { FileBiz fileBiz = new FileBiz(); request.setCharacterEncoding("GBK"); // 获取要下载的文件名 String fileName = request.getParameter("filename"); // 获取文件的绝对路径 String fileDir = this.getServletContext().getRealPath("/File"); /** 设置MS下载页头 */ response.setContentType("application/x-msdownload"); response.setHeader("Content-Disposition", "attachment;" + " fileame=" + fileName); //把方法写在另一个类里面了、 fileBiz.download(response.getOutputStream(), fileDir, fileName); }} //下载文件 public void download(OutputStream os, String fileDir,String fileName) { try { InputStream is = new FileInputStream(fileDir + "/" + fileName); int hasRead = 0; byte[] buffer = new byte[4096]; while ((hasRead = is.read(buffer, 0, buffer.length)) != -1) { os.write(buffer, 0, hasRead); } os.flush(); os.close(); is.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { System.out.println("下载中文件数据传输出错"); e.printStackTrace(); } }
下载没什么好说的、注意传过来的filename就行了、
DeleteFile.java------用于删除的servletpublic class DeleteFile extends HttpServlet { public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setCharacterEncoding("GBK"); response.setContentType("text/html"); PrintWriter out = response.getWriter(); // 获取要删除的文件名 String fileName = request.getParameter("filename"); // 获取文件的绝对路径 String fileDir = this.getServletContext().getRealPath("/File"); if(fileBiz.delete(fileDir,fileName)) out.println("删除成功"); else out.println("删除失败"); }} //删除文件 public boolean delete(String fileDir,String fileName){ return new File(fileDir+"/"+fileName).delete(); }
删除文件更简单、一行代码的事情、
其实这些都是基于流的操作、还有很过方法等着我们去尝试吧、
至于jar包的话、安装时应该有、没有百度一下、到处都是、还有一种方式上传、下载、没试过、用的是jspSmartUpload包、有时间研究研究、
代码有点多、多点乱、但、也没办法了、希望你能看明白、
就这样了、祝你好运、
推荐于2018-01-26
展开全部
如果你是纯JSP写的,可以用SmartUpload.在你的页面form 里 <form action="doUpload.jsp" method="POST" enctype="multipart/form-data">
文件名:<input type="text" name="name"/><br>
请选择上传的文件:<input type="file" name="file1"/>
<input type="submit" value="上传"/>
</form> 注意:enctype="multipart/form-data"这个一定要这样设置,具体什么意思我也不是很清楚.....(呵呵) 提交到执行的页面如下: //实例化上传组件
SmartUpload upload = new SmartUpload();
//初始化上传组件
upload.initialize(this.getServletConfig(), request, response);
//开始上传
upload.upload();
//获取上传的文件列表对象
Files f = upload.getFiles();
//获取文件对象
File fil = f.getFile(0);
//去掉文件后缀
String ext = fil.getFileExt();
//判断文件类型是否是jpg格式jpg,gif,bmp,png,JPG,GIF,BMP,PNG
if (!(ext.equals("jpg")) && !(ext.equals("gif")) && !(ext.equals("bmp")) && !(ext.equals("png")) && !(ext.equals("JPG")) && !(ext.equals("GIF")) && !(ext.equals("BMP")) && !(ext.equals("PNG"))) {
out.println("<script type='text/javascript'>alert('文件类型错误');location.replace('upLoadPhoto.jsp');</script>");
return;
}
//满足条件进行文件的上传uploadImages在webRoot文件夹下的一个目录
fil.saveAs("uploadImages/" + fil.getFileName());
String filepath = "uploadImages/" + fil.getFileName(); //保存到数据库的路径 OK.这样就可以了.....
文件名:<input type="text" name="name"/><br>
请选择上传的文件:<input type="file" name="file1"/>
<input type="submit" value="上传"/>
</form> 注意:enctype="multipart/form-data"这个一定要这样设置,具体什么意思我也不是很清楚.....(呵呵) 提交到执行的页面如下: //实例化上传组件
SmartUpload upload = new SmartUpload();
//初始化上传组件
upload.initialize(this.getServletConfig(), request, response);
//开始上传
upload.upload();
//获取上传的文件列表对象
Files f = upload.getFiles();
//获取文件对象
File fil = f.getFile(0);
//去掉文件后缀
String ext = fil.getFileExt();
//判断文件类型是否是jpg格式jpg,gif,bmp,png,JPG,GIF,BMP,PNG
if (!(ext.equals("jpg")) && !(ext.equals("gif")) && !(ext.equals("bmp")) && !(ext.equals("png")) && !(ext.equals("JPG")) && !(ext.equals("GIF")) && !(ext.equals("BMP")) && !(ext.equals("PNG"))) {
out.println("<script type='text/javascript'>alert('文件类型错误');location.replace('upLoadPhoto.jsp');</script>");
return;
}
//满足条件进行文件的上传uploadImages在webRoot文件夹下的一个目录
fil.saveAs("uploadImages/" + fil.getFileName());
String filepath = "uploadImages/" + fil.getFileName(); //保存到数据库的路径 OK.这样就可以了.....
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
jsp使用I/O文件操作类,可以将图片转成二进制的形式,然后保存在服务器中的一个文件夹,示例如下:
<%...@ page contentType="text/html;charset=gb2312"%>
<%...@ page import="java.util.*"%>
<%...@ page import="java.text.*"%>
<%...@ page import="java.io.*"%>
<%...@ page import="com.sun.image.codec.jpeg.*"%>
<%...@ page import="java.awt.image.*"%>
<%...@ page import="java.awt.*"%>
<%...
String name=request.getParameter("name");
name=new String(name.getBytes("ISO-8859-1"));
String ima=request.getParameter("image");
try{
String path=request.getRealPath("/");
FileOutputStream ot = new FileOutputStream(path+name+".jpg");
// ServletOutputStream ot=response.getOutputStream(); //也可以直接输出显示
FileInputStream in=new FileInputStream(ima);
JPEGImageDecoder jpgCodec = JPEGCodec.createJPEGDecoder(in);
BufferedImage image = jpgCodec.decodeAsBufferedImage();
JPEGImageEncoder encoder=JPEGCodec.createJPEGEncoder(ot);
encoder.encode(image);
in.close();
ot.close();
out.print("JSP上传图片成功!<BR>");
//加载上传成功的图片
out.print("<IMG width=200 height=200 src='"+name+".jpg' />");
}
catch(Exception e)
{
System.out.print(e.toString());
}
%>
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-08-07
展开全部
留下邮箱,我发代码给你。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询