博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
图片上传功能
阅读量:4290 次
发布时间:2019-05-27

本文共 5866 字,大约阅读时间需要 19 分钟。

       以前也实现过上传,只不过每次都是,写完之后没有总结,下次遇到时,还要重新写,重新调式,很是浪费时间,所以,今天实现一个上传图片的功能,包括简单的页面和servlet,下次再要写这个功能时,直接拿过来就可以了,没有理论,直接上代码+少量的注释。在最下面我会把项目上传,大家需要jar包,可以从项目中拿。

       该项目用到的jar包如图,在下面的项目demo中有jar包:

一、upload.jsp页面代码:

<%@ page language="java" contentType="text/html; charset=UTF-8"      pageEncoding="UTF-8"%>        
文件上传
文件上传

文件名称:
作 者:
二、web.xml配置文件代码:

UploadDemo
index.html
index.htm
index.jsp
default.html
default.htm
default.jsp
uploadPhoto
com.upload.demo.UploadServlet
uploadPhoto
/upload
三、UploadServlet代码:

package com.upload.demo;import java.io.BufferedReader;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.util.ArrayList;import java.util.Date;import java.util.HashMap;import java.util.List;import java.util.Map;import java.util.Properties;import java.util.UUID;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.commons.fileupload.FileItem;import org.apache.commons.fileupload.disk.DiskFileItemFactory;import org.apache.commons.fileupload.servlet.ServletFileUpload;import com.lidroid.xutils.http.RequestParams;public class UploadServlet extends HttpServlet{	@Override	protected void doGet(HttpServletRequest req, HttpServletResponse resp)			throws ServletException, IOException {		doPost(req, resp);	};	@Override	protected void doPost(HttpServletRequest request,			HttpServletResponse response) throws ServletException, IOException {		//服务器端接收,请求被后台拦截到这里		exeUploadedInfos(request, response);			};	/**	 *  定义接口	 */	public interface UploadStatusListener {		public void status(boolean status, Map
params, List
files, HttpServletRequest request); } UploadStatusListener mUploadStatusListener = null; // 注册监听器,如果这里没有使用Vector而是使用ArrayList那么要注意同步问题 public void addStatusListener(UploadStatusListener listener) { mUploadStatusListener = listener; } /** * @function:回调方法,执行图片上传,根据成功或失败的状态完成其他的操作 * @param request * @param response */ private void exeUploadedInfos(HttpServletRequest request, HttpServletResponse response) { UploadServlet up = new UploadServlet(); up.addStatusListener(new UploadStatusListener() { public void status(boolean status, Map
params, List
files, HttpServletRequest request) { if (status) {//成功 //Map中取值 String memberId = params.get("memberId"); //List中取值 String fileUrl = files.get(0); System.out.println("===================================成功"); } else { //失败 System.out.println("========================================失败"); } } }); up.upload(request, response); } /** * @function:具体上传图片的功能在这里完成, * 然后调用接口回调方法mUploadStatusListener.status(flag, params, filenames , request);跳转到回调函数中 * @param request * @param response */ public void upload(HttpServletRequest request, HttpServletResponse response) { boolean flag = false; Map
params = new HashMap
(); List
filenames = new ArrayList
(); try { System.out.println("开始文件上传****************"); request.setCharacterEncoding("utf-8"); // 设置编码 // 设置上传文件最大为 3M final long MAX_SIZE = 3 * 1024 * 1024; // 1.创建一个解析器工厂 DiskFileItemFactory factory = new DiskFileItemFactory(); // 获取临时文件路径 String savePath = "F:/upload/" ;//具体的路径 if(!new File(savePath).exists()){ new File(savePath).mkdirs(); } factory.setRepository(new File(savePath)); factory.setSizeThreshold(4096); // 2.得到一个解析器 ServletFileUpload upload = new ServletFileUpload(factory); upload.setSizeMax(MAX_SIZE); // upload.setHeaderEncoding("UTF-8"); // 3.将请求传入解析器,对请求进行解析 List
list = upload.parseRequest(request); // 4.迭代list集合,得到每个输入项的数据 int count = 0 ; for (FileItem item : list) { count ++ ; // 5.判断item的类型 if (item.isFormField()) { // 普通文本输入项 String inputName = item.getFieldName(); String inputValue = item.getString(); params.put(inputName, inputValue); System.out.println("==================传进来的参数: "+count+"、"+inputName + "=" + inputValue); } else { // 上传文件输入项(如图片) String fileName = item.getName();// 获取文件名 if (!"".equals(fileName)) { fileName = fileName.substring(fileName.lastIndexOf("\\") + 1); System.out.println("*************存放传过来的图片****************"); InputStream in = item.getInputStream(); FileOutputStream out = new FileOutputStream(savePath+fileName); byte[] buf = new byte[1024]; int len = 0; while ((len = in.read(buf)) > 0) { out.write(buf, 0, len); } in.close(); out.close(); item.delete();// 删除临时文件 filenames.add("上传成功了") ; flag = true; if (mUploadStatusListener != null) { System.out.println("======文件上传: ===flag=" + flag +";==="+ params.toString() + "==文件名fileName:=" + fileName); mUploadStatusListener.status(flag, params, filenames , request); } System.out.println("文件上传结束****************"); } } } } catch (Exception e) { e.printStackTrace(); request.setAttribute("message", "上传失败"); System.out.println("***********上传失败******************"); if (mUploadStatusListener != null) { System.out.println("****************上传失败*******************************"); mUploadStatusListener.status(flag, params, filenames , request); } } } }
四、代码解释:

1、访问路径:http://localhost:8080/UploadDemo/upload.jsp

如图:

2、点击上传后,进入UploadServlet类

List<FileItem> list = upload.parseRequest(request);

产生临时上传文件

如图:

3、FileOutputStream out = new FileOutputStream(savePath+fileName);

创建要生成的图片

如图:

4、out.close();

执行完这行代码,上传图片的字节流写入完毕,完整图片如图

5、item.delete();// 删除临时文件,删除后如图:

五、项目下载:

     

你可能感兴趣的文章
每一个程序员需要了解的10个Linux命令
查看>>
service的自调用 VS service之间调用
查看>>
Android权限管理之Permission权限机制及使用
查看>>
重识Retrofit
查看>>
PowerDesigner(数据建模)使用大全
查看>>
RadioButton与CheckBox_优就业
查看>>
java中的throw与throws的区别
查看>>
js函数的传参是按值传对递
查看>>
优化用户登录体验效果
查看>>
用js批量选中功能实现更改数据库中status状态值_优就业
查看>>
JavaScript事件详解-zepto的事件实现(二)
查看>>
MySql表信息基础知识学习
查看>>
为什么document找到的不是html节点_优就业
查看>>
Javascript本地存储小结
查看>>
常用排序方法介绍
查看>>
Java异常分类和统一处理
查看>>
原 荐 cache线程池对数据库操作的饥饿问题
查看>>
使用Eclipse把java文件打包成jar 含有第三方jar库的jar包
查看>>
3种web会话管理的方式
查看>>
SSM(框架)-异常1:面向接口式编程异常
查看>>