upload上传功能

8 篇文章 0 订阅
  • servlet+jsp实现文件上传,和图片预览

    首先需要Jar包
    commons-fileupload-1.3
    commons-io-1.2
    commons-logging-1.1.3
    现在写代码

    upload.jsp前台界面

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>    
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
 <base href="<%=basePath%>">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
<!-- 这个是接收服务器发回来的内容,EL表达式 -->
    ${path}
       <form action="UploadTestServlet" enctype="multipart/form-data" id="loginform" name="loginform" method="post">
            选择图片:<input type="file" name="filename"/>
            <input id="subid" name="subid" type="submit" value="提交">
        </form>
</body>
</html>

UploadTestServlet后台运行

package com.neusoft.listener;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Iterator;
import java.util.List;
import java.util.UUID;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletInputStream;
import javax.servlet.annotation.WebServlet;
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;
/**
 * Servlet implementation class UploadTestServlet
 */
@WebServlet("/UploadTestServlet")
public class UploadTestServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
	
	
	    /** 上传目录名*/
	    private static final String UPLOAD_DIR = "uploadDir/img/";
	    /** 上传临时文件存储目录*/
	    private static final String TEMP_UPLOAD_DIR ="uploadDir/temp/";
	    /** 总上传文件最大为10M*/
	    private static final Long TOTAL_FILE_MAXSIZE = 10000000L;
	    /** 单个上传文件最大为10M*/
	    private static final int SINGLE_FILE_MAXSIZE = 2*1024*1024;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public UploadTestServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("UploadTestServlet in");
        //设置编码格式,前端后台统一是utf-8
        request.setCharacterEncoding("utf-8");
        response.setContentType("text/json;charset=utf-8");
        //
        PrintWriter out = response.getWriter();
        // Servlet上下文对象
        ServletContext servletContext = this.getServletConfig().getServletContext();
        // tomcat的项目路径
        String realPath = servletContext.getRealPath(UPLOAD_DIR)+"/";
        String tempPath = servletContext.getRealPath(TEMP_UPLOAD_DIR)+"/";
        File tempPathFile = new File(tempPath);
        File realPathFile = new File(realPath);
        if (!tempPathFile.exists()) {
            tempPathFile.mkdirs();
        }
        if (!realPathFile.exists()) {
            realPathFile.mkdirs();
        }

        // 文件对象的工厂类
        DiskFileItemFactory factory = new DiskFileItemFactory();
        // 设置最大上传大小
        factory.setSizeThreshold(SINGLE_FILE_MAXSIZE);
        // 将临时文件夹交给文件对象的工厂类
        factory.setRepository(tempPathFile);
        // 创建一个上传文件的处理者
        ServletFileUpload upload = new ServletFileUpload(factory);
        // 设置所有请求的总大小
         upload.setSizeMax(TOTAL_FILE_MAXSIZE);
        // 解析request
        List<FileItem> items;
        try {
            items = upload.parseRequest(request);
            // 处理解析处理的请求对象
            Iterator<FileItem> iter = items.iterator();
            while (iter.hasNext()) {
                FileItem item = iter.next();
                //判断是文件还是文本
                if (!item.isFormField()) {
                    //文件名加上UUid,可以防止重复
//                    String fileName = UUID.randomUUID().toString().replace("-", "")+"_"+item.getName();
                    String fileName = item.getName();
                    System.out.println("UploadTestServlet file path:"+UPLOAD_DIR+fileName);
                    //判断空
                    if (fileName!=null && !"".equals(fileName)) {
                        //将文件写到硬盘
                        item.write(new File(realPath+fileName));
                        //将图片地址保存到request中,再转发回给jsp
                        //UPLOAD_DIR+fileName这个是相对路径,给前端页面
//                        realPath+fileName是绝对路径
                        request.setAttribute("path", UPLOAD_DIR+fileName);
                        request.getRequestDispatcher("/jsp/upload.jsp").forward(request, response);
//                        out.write("ok");
                    }
                } 
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

	    
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值