JSP如何上传图片
发布网友
发布时间:2022-05-11 12:20
我来回答
共4个回答
热心网友
时间:2023-07-22 18:30
请几天写了一个、代码给你看看、说明下:这有两个文件夹、都在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("删除成功");elseout.println("删除失败");}} //删除文件public boolean delete(String fileDir,String fileName){return new File(fileDir+"/"+fileName).delete();}
删除文件更简单、一行代码的事情、
其实这些都是基于流的操作、还有很过方法等着我们去尝试吧、
至于jar包的话、安装时应该有、没有百度一下、到处都是、还有一种方式上传、下载、没试过、用的是jspSmartUpload包、有时间研究研究、
代码有点多、多点乱、但、也没办法了、希望你能看明白、
就这样了、祝你好运、
热心网友
时间:2023-07-22 18:31
如果你是纯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.这样就可以了.....
热心网友
时间:2023-07-22 18:31
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());
}
%>
热心网友
时间:2023-07-22 18:32
留下邮箱,我发代码给你。