最近写web大作业,自拟的题目是招聘网站的开发,没有用框架写,写完有空记录一下图片上传的实现(毕竟本人菜鸡之前试图写这个功能但总是没法实现),代码参考的是这位大佬的:https://www.jianshu.com/p/118335af2245
直接上代码:UploadpicsServlet.java
package zpwz;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.List;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import com.Database.conDB;
/**
* Servlet implementation class UploadpicsServlet
*/
@WebServlet("/UploadpicsServlet")
public class UploadpicsServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public UploadpicsServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
//response.getWriter().append("Served at: ").append(request.getContextPath());
request.setCharacterEncoding("utf-8");//防止表单传递的中文乱码
response.setCharacterEncoding("GBK");
// 为解析类提供配置
DiskFileItemFactory factory = new DiskFileItemFactory();
// 创建解析类的实例
ServletFileUpload uplod= new ServletFileUpload(factory);
// 设置上传单个文件的大小的最大值
uplod.setFileSizeMax(500 * 500);
// 每个表单域中数据会封装到一个对应的FileTem对象
HttpSession session = request.getSession();
PrintWriter out = response.getWriter();
try {
String username=session.getAttribute("username").toString();
List<FileItem> items = uplod.parseRequest(request);
// 区分表单域
for (int i = 0; i < items.size(); i++) {
FileItem item = items.get(i);
// isFormField为true,表示不是文件上传表单域
if (!item.isFormField()) {
ServletContext sctx = getServletContext();
// 获取文件的存取物理路径
String path = sctx.getRealPath("images");
//String path =".\\images";
//System.out.println(path);
// 获取文件名
String fileName = item.getName();
//System.out.println(fileName);
// 该方法在某些系统会放回路径加文件名
fileName = fileName.substring(fileName.lastIndexOf(".") + 1);
//System.out.println(fileName.lastIndexOf("\\"));
File file = new File(path + "\\" +username+"_pics."+ fileName);//重命名图片
// 上传文件
if (!file.exists()) {
item.write(file);
}
//删除处理文件上传时生成的临时文件
item.delete();
/****/
conDB conn = new conDB();
conn.connectDB();
String url=username+"_pics."+ fileName;
String sql ="update employee_user set photo_url='"+url+"' where employee_id="+session.getAttribute("userid").toString();
Statement statement=conn.getConnection().createStatement();
boolean rs =statement.execute(sql);
if(rs!=true)
{
out.println("<script>alert('上传成功');window.location.href='employee_info.jsp'</script>");
}
else
{
out.println("<script>alert('上传失败');window.location.href='employee_info.jsp'</script>");
}
}
}
}catch(Exception e) {
System.out.println(e.toString());
}
}
/**
* @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);
}
}
简单的前端代码:
<form action="UploadpicsServlet" method="POST" enctype="multipart/form-data">
<input type="file" name="image"/><br><br>
<input type="submit"> <input type="reset">
</form>
注意:
1.前端表单enctype属性一定要设为"multipart/form-data"
2.需要导入两个包,如果没有可以从我的网盘下载
链接: https://pan.baidu.com/s/1AUuCkjjuG3SE3-PTF1mASA 提取码: 17d5