前文
最开始是为了解决图片保存到MySQL数据库的问题,之前没做过,后来自己查资料。找到两种有效的方式。
第一种是直接把图片转化成字节流存进数据库,这样的例子很多,好处很明显,存进去以后,可以直接备份数据库带走,简单方面,坏处就是图片占用内存,一旦数量上来,那么对内存库的压力很大,在高并发访问的情况下,占用资源较大,所以一般情况下,很多公司都不是采用这样的方式。而是采用第二种,把图片上传到服务器的文件夹内,然后数据库直接存储图片的地址,这样的坏处就是项目的迁移,文件夹也要跟着备份,备份两次,好处就很明显了,显然存地址跟存内容占用的空间大小就很明显,大大减轻了数据库的压力。因此本文采用的就是数据库存储图片地址,图片直接存储在本机文件夹中。
正文
营业执照选择自营,必须填写营业执照代码跟照片,非自营的,可以不用填写。代码如下:
<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盘,确实看到照片已经上传成功了,这是一个大概的步骤,具体代码因为项目代码多,就不全部上传了,有问题可以留言。
声明:我要去上班所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流,版权归原作者小疯子程序员所有,原文出处。若您的权利被侵害,请联系删除。
本文标题:(如何用jsp编写网页)(jsp怎么做)
本文链接:https://www.51qsb.cn/article/m8ber.html