文件上传(基础上传)

文件上传

文件的上传也是项目中常见的功能,算是项目的一个核心功能,比如在注册的时候,很可能需要在表单中要求用户提交照片,此时就需要用到文件的上传

文件上传的第三方工具有很多,这次我们先用SmartUpload组件
下载之后将工具包拷贝到项目的 lib 下

定义表单

regist.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
		<form action="emp/add" method="post" enctype="multipart/form-data">
		<fieldset>
			<legend>请注册</legend>
			名字: <input type="text" name="username" placehodler="输入用户名"><br>
			<br> 薪资:<input type="text" name="sal"
				placehodler="薪资"><br>
			<br> 职位:<input type="text" name="job"
				placehodler="佣金"><br>
			<br> 佣金:<input type="text" name="comm"
				placehodler=""><br>
			<br> 部门编号:<input type="text" name="deptno"
				placehodler=""><br>
			<br>&nbsp;&nbsp;&nbsp;片:<input type="file" name="pic"><br>
			<br> <input type="submit" value="提交"> <input
				type="reset" value="重置">
		</fieldset>
	</form>
</body>
</html>

定义一个公共类

上传是一个公共类的操作,可能在很多个servlet中都要涉及到上传,此时就需要将上传的操作定义到一个公共父类

package com.xie;

import java.io.File;
import java.util.UUID;

import javax.servlet.ServletConfig;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.jspsmart.upload.SmartUpload;

public abstract class BaseServlet extends HttpServlet{
	/**
	 * 保存文件
	 * @param req
	 * @param resp
	 */
	public void saveFile(HttpServletRequest req, HttpServletResponse resp) {
		//照片处理
		try {
			//1.实例化上传的工具类对象
			SmartUpload smart = new SmartUpload();
			//2.取得config内置对象
			ServletConfig config = this.getServletConfig();
			//3.初始化
			smart.initialize(config, req, resp);
			//4.设置相关参数(允许上传的文件类型)
			smart.setAllowedFilesList("jpg,png");
			//smart.setDeniedFilesList("pdf"); 不允许的文件类型
			//4.1.设置单个文件的最大值
			smart.setMaxFileSize(1024*1024*10);
			//4.2.设置所有文件的最大值
			smart.setTotalMaxFileSize(1024*1024*10*10);
			//5.实现上传(将文件放到内存,还没有保存到磁盘)
			smart.upload();
			//6.取得项目的部署路径
			String savePath = req.getServletContext().getRealPath("/img/");
			System.out.println(savePath);
			File file = new File(savePath);
			if (!file.exists()) {
				file.mkdirs();
			}
			//7.按照文件的原名称保存
			//smart.save(savePath);
			//8.为文件重命名保存(避免覆盖)
			//取得文件的拓展名
			String ext = smart.getFiles().getFile(0).getFileExt();
			//生成新的文件名
			String newFileName = UUID.randomUUID() + "." + ext;
			//按照新的文件名保存文件,取得的是第一张照片对象直接调用该对象的saveAs方法实现保存
			smart.getFiles().getFile(0).saveAs(savePath + newFileName);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	/**
	 * 删除文件
	 * @param req
	 * @param fileName 要删除的文件名
	 */
	public void removeFile(HttpServletRequest req, String fileName) {
		String removePath = req.getServletContext().getRealPath("/img"+this.getDir()+fileName);
		File file = new File(removePath);
		if (file.exists()) {//如果存在则删除
			file.delete();
		}
	}
	
	/**
	 * 根据子类取得上传的文件夹名
	 * @return
	 */
	public abstract String getDir();
}
package com.xie;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@SuppressWarnings("serial")
@WebServlet(urlPatterns= {"/emp/*"})
public class EmpServlet extends BaseServlet{
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		String pathInfo = req.getPathInfo();
		if ("/add".equals(pathInfo)) {
			this.addEmp(req, resp);
		}else if ("/remove".equals(pathInfo)) {
			this.removeEmp(req, resp);
		}
		
	}
	
	/**
	 * 添加雇员信息
	 * @param req
	 * @param resp
	 */
	public void addEmp(HttpServletRequest req, HttpServletResponse resp) {
		String name = req.getParameter("username");
		//String  sal = req.getParameter("sal");
		//String  comm = req.getParameter("comm");
		String job = req.getParameter("job");
		//将字符串类型的编号转换为整数类型
		System.out.println(req.getParameter("deptno"));
		
		System.out.println("名字:" + name + ",职位:" + job);
		//将以上信息保存到数据库
		//上传照片
		super.saveFile(req, resp);
	}
	
	/**
	 * 删除雇员信息
	 * @param req
	 * @param resp
	 */
	public void removeEmp(HttpServletRequest req, HttpServletResponse resp) {
		super.removeFile(req, "");
	}
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		this.doGet(req, resp);
	}
	@Override
	public String getDir() {
		return "/emp/";
	}
	
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值