第一种是直接把图片转化成字节流存进数据库,这样的例子很多,好处很明显,存进去往后,可以直接备份数据库带走,大略方面,坏处便是图片占用内存,一旦数量上来,那么对内存库的压力很大,在高并发访问的情形下,占用资源较大,以是一样平常情形下,很多公司都不是采取这样的办法。
而是采取第二种,把图片上传到做事器的文件夹内,然后数据库直接存储图片的地址,这样的坏处便是项目的迁移,文件夹也要随着备份,备份两次,好处就很明显了,显然存地址跟存内容占用的空间大小就很明显,大大减轻了数据库的压力。
因此本文采取的便是数据库存储图片地址,图片直接存储在本机文件夹中。

正文

业务执照选择自营,必须填写业务执照代码跟照片,非自营的,可以不用填写。
代码如下:

<tr>

jsp图片上传servletjsp统一个页面上传文字图片并将图片地址保留到MYSQL Docker

<td style=\公众text-align: right;\"大众><font size=\"大众2px\公众>业务执照代码</font></td>

<td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type=\"大众radio\公众 name=\公众ra\公众 id=\"大众ra\公众 checked=\公众true\"大众 onclick=\"大众_change(this);\"大众 value=\公众a\"大众/> 自营

<input type=\"大众radio\"大众 name=\公众ra\"大众 id=\公众ra\公众 onclick=\"大众_change(this); \"大众value=\"大众b\公众/> 非自营

<td><font color=\"大众#999999\"大众> 自营必填,同时上传业务执照照片</font></td>

</td> <div id=\公众prvid\公众></div>

</tr>

上传照片在form表单里必须填写 enctype=\"大众multipart/form-data\"大众,否则图片就无法上传,只能上传笔墨信息,但是加了这条语句往后,后台就无法用request.getParameter(arg0)来获取参数了,由于上传的信息全部转化成了字节流,这是我添加往后一贯出错创造的问题所在。

接下来我们须要编写一个upload的类来处理图片的上传,这个类是网上找的,须要添加包

cos.jar,下载地址稍后会在留言里。
代码如下

import java.io.File;

import java.io.IOException;

import java.util.Date;

import java.util.HashMap;

import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import com.oreilly.servlet.multipart.FilePart;

import com.oreilly.servlet.multipart.MultipartParser;

import com.oreilly.servlet.multipart.ParamPart;

import com.oreilly.servlet.multipart.Part;

public class Upload {

public static Map<String, String> upload(HttpServletRequest request,

int maxSize, String path) {

//以map形式保存数据 key对应保存的是获取界面上的name名称 value保存的是获取界面上的name对应的值

Map<String, String> map = new HashMap<String, String>();

Part part = null;

try {

MultipartParser mrequest = new MultipartParser(request, maxSize);

mrequest.setEncoding(\公众utf-8\公众);

//遍历所有的part组

while ((part = mrequest.readNextPart()) != null) {

if (part.isFile()) { //判断是否是文件

FilePart filepart = (FilePart) part;//转化成文件组

String fileName = filepart.getFileName();//得到文件名

if (fileName != null && fileName.length() > 0) {

// 取得扩展名

String fileExtName = fileName.substring(

fileName.lastIndexOf(\公众.\"大众) + 1).toLowerCase();

// 只上传图片 //判断图片上传的格式是否符合 后缀名是否有效

if (fileExtName.equalsIgnoreCase(\公众jpeg\"大众)

|| fileExtName.equalsIgnoreCase(\"大众png\"大众)||

fileExtName.equalsIgnoreCase(\公众jpg\"大众)

|| fileExtName.equalsIgnoreCase(\"大众gif\"大众)

|| fileExtName.equalsIgnoreCase(\公众ico\"大众)

|| fileExtName.equalsIgnoreCase(\公众bmp\公众)

|| fileExtName.equalsIgnoreCase(\公众flv\公众)

|| fileExtName.equalsIgnoreCase(\"大众mp4\"大众)

|| fileExtName.equalsIgnoreCase(\"大众mp3\公众)) {

/String newFileName = new Date().getTime() + \"大众.\公众+ fileExtName;//重新改文件名 文件名+扩展名 /

String newFileName =new Date().getTime() +fileName;//不改图片名字

String newPath = path + \公众/\"大众 + newFileName; //文件处理文件上传的路径

File newFile = new File(newPath);

filepart.writeTo(newFile); //将文件真正写入到对应的文件夹中

//filepart.getName() 得到 request 要吸收的参数的名字

map.put(\"大众newFileName\"大众, newFileName);

map.put(filepart.getName(), newFileName);//把文件信息保存到map中

map.put(\公众newFile\"大众, newFile.toString());

} else {

map.put(\公众geshi\公众, \公众geshi\"大众);

continue;

}// 解释上传的不是图片

} else {

map.put(\"大众yes\"大众,\"大众yes\"大众);

continue; // 解释没有选择上传图片

}

} else if (part.isParam()) { //判断是否是参数

ParamPart paramPart = (ParamPart) part;

map.put(paramPart.getName(), paramPart.getStringValue());

}

}

} catch (IOException e) {

e.printStackTrace();

}

return map;

}

}

else if (part.isParam()) { //判断是否是参数

ParamPart paramPart = (ParamPart) part;

map.put(paramPart.getName(), paramPart.getStringValue());

}

通过不雅观察代码,熟习思路,大概便是先看这个part是否是文件,如果是文件,则进行一系列文件处理,如果不是文件,看是否是参数,如果是参数,则依次用map存储起来,因此在后台就可以map.get()来获取参数了,实验往后创造确实可行,因此后台代码如下:

后台servlet代码:

protected void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

// TODO Auto-generated method stub

request.setCharacterEncoding(\"大众UTF-8\"大众);

String PATH = \"大众image/license_pic\"大众;

String path = \"大众E:/\"大众+PATH;

Map<String, String> map = Upload.upload(request, 1024 1024 10, path);

// String newfile = map.get(\"大众newFile\"大众);

String newFileName =PATH+ map.get(\公众newFileName\"大众);

User user = new User();

Shop shop = new Shop();

user.setUsername(map.get(\"大众username\"大众));

user.setPassword(map.get(\"大众password\"大众));

shop.setName(map.get(\公众name\"大众));

shop.setAddress(map.get(\公众address\公众));

shop.setYear(map.get(\"大众year\"大众));

shop.setPhone(map.get(\公众phone\"大众));

shop.setMaster(map.get(\"大众master\"大众));

shop.setIdentity(map.get(\"大众identity\"大众));

shop.setLicense(map.get(\"大众license\公众));

shop.setTelephone(map.get(\"大众telephone\"大众));

shop.setNote(map.get(\"大众note\"大众));

shop.setLicense_pic(newFileName);

System.out.println(newFileName);

UserServiceImpl us = new UserServiceImpl();

ShopServiceImpl ss = new ShopServiceImpl();

try {

int i = 0, j = 0;

i = us.insertUser(user);

System.out.println(user.getUsername());

int id = us.selectByName(user.getUsername()).getId();

j = ss.insertShop(shop, id);

if (i == 1 && j == 1) {

System.out.println(\公众插入成功!\"大众);

request.getSession().setAttribute(\"大众u\"大众, user);

request.getRequestDispatcher(\公众/admin/login/login.jsp\"大众).forward(request, response);

} else {

System.out.println(\"大众插入失落败!
\"大众);

response.sendRedirect(\"大众/shop_Register3/admin/login/register.jsp?error=yes\"大众);

}

} catch (Exception e) {

e.printStackTrace();

}

}

请点击此处输入图片描末了得到结果输出,输出显示文件名称,然后用户名,末了插入成功,解释是可行的,查看自己的E盘,确实看到照片已经上传成功了,这是一个大概的步骤,详细代码由于项目代码多,就不全部上传了,有问题可以留言。