JAVA eclipse如何上传图片到数据库?
1、笔者是在Eclipse 8.0的编程环境中演示的,使用的是MVC三层架构。需要用到两个图片处理的插件,这两个插件直接在网上搜索下载(根据自己的eclipse版本进行选择),解压后放到WebContent——WEB-INF——lib目录下


2、创建一个用于处理图片的类PhotoDao.java(包含以下函数),可以直接复制,仅需修改saveFile函数的绝对路径(项目中存放图片的img文件所在的路径):
package Photo;
public class PhotoDao {
/**
*2018年10月24日下午10:41:33
*这个函数的功能是获取前端的数据集合,将文件打包成File以便后续操作
*/
public static List<FileItem> getRequsetFileItems(HttpServletRequest request,ServletContext servletContext){
boolean isMultipart=ServletFileUpload.isMultipartContent(request);
if(isMultipart) {
DiskFileItemFactory factory = new DiskFileItemFactory();
String str="javax.servelet.context.tempdir";
File repository=(File) servletContext.getAttribute(str);
factory.setRepository(repository);
ServletFileUpload upload=new ServletFileUpload(factory);
try {
return upload.parseRequest(request);
}catch (FileUploadException e) {
// TODO: handle exception
return null;
}
}else {
return null;
}
}
/**
*2018年10月24日下午10:37:59
*这个函数的功能是将文件传到预先设置的绝对路径中,也就是项目里的imgs文件夹
*/
public static boolean saveFile(FileItem item,String fileName) {
File savePath=new File("D:\\eclipse\\workspace\\项目名称\\WebContent\\img");
if(!savePath.exists()) {
savePath.mkdirs();
}
File uploadFile=new File(savePath+File.separator+fileName);
try{
item.write(uploadFile);
//System.out.println("保存文件成功");
return true;
}catch(Exception e){
// System.out.println("保存文件失败");
}
return false;
}
/**
*2018年10月24日下午8:02:04
*这个函数的功能是获取当前时间点与1970年的间隔秒数
*/
public static int getSecondTimestamp(Date date){
if (null == date) {
return 0;
}
String timestamp = String.valueOf(date.getTime());
System.out.println(timestamp);
int length = timestamp.length();
if (length > 3) {
return Integer.valueOf(timestamp.substring(0,length-3));
} else {
return 0;
}
}
/**
*
*2018年10月24日下午8:42:05
*这个函数的功能是得到新的照片名称
*/
public static String getPhotoNewName() {
Date date=new Date();
int second=getSecondTimestamp(date);
String fileName=String.valueOf(second)+".jpg";
return fileName;
}
/**
*2018年10月24日下午8:48:58
*这个函数的功能是判断文件后缀是否是jpg格式
*/
public static boolean isGif(FileItem item) {
String fileFullName=item.getName();
File fileInfo=new File(fileFullName);
String suffix = fileInfo.getName().substring(fileInfo.getName().lastIndexOf(".") + 1);
if(suffix.equals("jpg")) {
return true;
}
return false;
}
}

3、创建zhuce.jsp:






4、创建上传图片的UserServlet:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
//获取本次操作的类型
String type = request.getParameter("type");
//注册
try {
switch (type) {
case "zhuce":
user_zhuce(request, response);
break;
}
}catch (SQLException e) {
e.printStackTrace();
}
}
//注册
protected void user_zhuce(HttpServletRequest request, HttpServletResponse response) throws IOException, SQLException, ServletException {
String uname = null; //用户名
String unickname = null; //昵称
String upass1 = null; //密码
String upass2 = null; //二次输入的密码
String uemail = null; //邮箱
List<String> list=new ArrayList<String>();
String filename=PhotoDao.getPhotoNewName(); //
ServletContext servletContext=null;
servletContext=request.getSession().getServletContext(); //获取文件的真实路径:在数据库中存储格式:/webTest/img/***.jpg
//第一步:获取页面上上传的图片资源
List<org.apache.commons.fileupload.FileItem> items=PhotoDao.getRequsetFileItems(request,servletContext); //
boolean isLoadToSQL=false;
for(org.apache.commons.fileupload.FileItem item:items) {
if(!item.isFormField()){ //是文件类型的
//判断后缀名是否是jpg
if(PhotoDao.isGif(item)) { //
isLoadToSQL=PhotoDao.saveFile(item,filename); //
}else {
System.out.println("后缀格式有误,保存文件失败");
}
}else { //不是文件,是表单类型
switch(item.getFieldName()) { //获取表单标签“name”的属性值
case "uname": uname = item.getString("UTF-8");break;
case "unickname": unickname = item.getString("UTF-8");break;
case "upass1": upass1 = item.getString("UTF-8");break;
case "upass2": upass2 = item.getString("UTF-8");break;
case "uemail": uemail = item.getString("UTF-8");break;
}
}
}
String finalPhotoName= "./img/"+filename;
User user =new User();
boolean flag = user.adduser(uname, unickname, upass1, upass2, uemail, finalPhotoName);
if(flag==false) {
JOptionPane.showMessageDialog(null, "用户注册失败!", "警告信息", JOptionPane.WARNING_MESSAGE);
request.getRequestDispatcher("./zhuce.jsp").forward(request, response);
}
else request.getRequestDispatcher("./login.jsp").forward(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
5、效果图如下:

