javaweb实现文件上传,带存储路径到数据库

效果

在这里插入图片描述

其中servlet中的代码

package com.controller;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

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

import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.io.IOUtils;

import com.pojo.User;
import com.service.UserService;
import com.utils.UploadUtils;


public class UploadFileServlet extends HttpServlet {
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		//MAP目的:携带数据(form表单中的字段)
		Map<String,String> map=new HashMap<String,String>();
		//目的:携带数据,向sercie,dao传递
		User user=new User();
		try {
			//以下三行代码功能: 通过request.getInputStream();获取到请求体的全部内容
			//进行解析,将每对分割线中的内容封装在了FileItem对象中
			DiskFileItemFactory fac=new DiskFileItemFactory();
			ServletFileUpload upload=new ServletFileUpload(fac);
			List<FileItem> list=upload.parseRequest(request);
			//4_遍历集合
			for (FileItem item : list) {
				if(item.isFormField()){
					//5_如果当前的FileItem对象是普通项
					//将普通项上name属性的值作为键,将获取到的内容作为值,放入MAP中
					map.put(item.getFieldName(), item.getString("utf-8"));
				}else{
					
					//获取到原始的文件名称
					String oldFileName=item.getName();
					//获取到要保存文件的名称  
					String newFileName=UploadUtils.getUUIDName(oldFileName);
					//通过FileItem获取到输入流对象,通过输入流可以获取到图片二进制数据
					InputStream is=item.getInputStream();
					//D:\tomcat\tomcat71_sz07\webapps\11.20\images
					String realPath = getServletContext().getRealPath("/images");
					//在服务端创建一个空文件(后缀必须和上传到服务端的文件名后缀一致)
					File file=new File(realPath,newFileName);
					if(!file.exists()){
						file.createNewFile();
					}
					//建立和空文件对应的输出流
					OutputStream os=new FileOutputStream(file);
					//将输入流中的数据刷到输出流中
					//释放资源
					IOUtils.copy(is, os);
					IOUtils.closeQuietly(is);
					IOUtils.closeQuietly(os);
					//向map中存入一个键值对的数据(****这里就是form提交文件名的那个字段)
					map.put("userhead", "/images/"+newFileName);
				}
			}
			//7_利用BeanUtils将MAP中的数据填充到user对象上
			BeanUtils.populate(user, map);
			System.out.println(user.getUserhead());
			//8_调用servcie_dao将user上携带的数据存入数据仓库
			new UserService().add(user);
			request.setAttribute("msg", " 文件上传成功! ");
			request.getRequestDispatcher("/msg.jsp").forward(request, response);
		} catch (Exception e) {
			e.printStackTrace();
		}
		
	}

}

dao中的代码

package com.dao;

import java.sql.SQLException;

import org.apache.commons.dbutils.QueryRunner;

import com.pojo.User;
import com.utils.DataSourceUtil;

public class UserDao {

	public void add(User user) throws SQLException {
		QueryRunner qr = new QueryRunner(DataSourceUtil.getDataSource());
		String sql = "insert into user(username,password,userhead) values(?,?,?)";
		Object[] params = {user.getUsername(),user.getPassword(),user.getUserhead()};
		qr.update(sql, params);
	}

}

需要源代码和数据库的,下方:

链接:https://pan.baidu.com/s/1nz9PiUTAvyCD0j61GZjZCA
提取码:8lit

发布了86 篇原创文章 · 获赞 5 · 访问量 8917

猜你喜欢

转载自blog.csdn.net/qq_35367566/article/details/103166119