第一种是直接把图片转化成字节流存进数据库,这样的例子很多,好处很明显,存进去往后,可以直接备份数据库带走,大略方面,坏处便是图片占用内存,一旦数量上来,那么对内存库的压力很大,在高并发访问的情形下,占用资源较大,以是一样平常情形下,很多公司都不是采取这样的办法。而是采取第二种,把图片上传到做事器的文件夹内,然后数据库直接存储图片的地址,这样的坏处便是项目的迁移,文件夹也要随着备份,备份两次,好处就很明显了,显然存地址跟存内容占用的空间大小就很明显,大大减轻了数据库的压力。因此本文采取的便是数据库存储图片地址,图片直接存储在本机文件夹中。
正文
业务执照选择自营,必须填写业务执照代码跟照片,非自营的,可以不用填写。代码如下:
<tr>
<td style=\"大众text-align: right;\公众><font size=\"大众2px\"大众>业务执照代码</font></td>
<td> <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盘,确实看到照片已经上传成功了,这是一个大概的步骤,详细代码由于项目代码多,就不全部上传了,有问题可以留言。