图片上传后不能预览,图片损坏
package controller;
import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.UUID;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import entity.Painting;
import service.PaintingService;
import utils.PageModel;
/**
* Servlet implementation class ManagementController
*/
@WebServlet("/management")
public class ManagementController extends HttpServlet {
private PaintingService paintingService=new PaintingService();
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public ManagementController() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
String method=request.getParameter("method");
if(method.equals("list")) {
this.list(request,response);
}else if(method.equals("show_create")) {
this.showCreatePage(request,response);
}else if(method.equals("create")) {
this.create(request,response);
}
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
private void list(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String p=request.getParameter("p");
String r=request.getParameter("r");
if(p==null) {
p="1";
}
if(r==null) {
r="6";
}
PageModel pageModel=paintingService.pagination(Integer.parseInt(p), Integer.parseInt(r));
request.setAttribute("pageModel", pageModel);
request.getRequestDispatcher("/WEB-INF/jsp/list.jsp").forward(request,response);
}
private void showCreatePage(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.getRequestDispatcher("/WEB-INF/jsp/create.jsp").forward(request, response);
}
private void create(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//String pname=request.getParameter("pname");
//request.getRequestDispatcher("/WEB-INF/jsp/create.jsp").forward(request, response);
//1初始化FileUpload
/**
* FileItemFactory用于将前端表单的数据转换为一个FileItem对象
* ServletFileUpload则是为FileUpload组件提供一个Java web的Http请求解析
*/
FileItemFactory factory=new DiskFileItemFactory();
ServletFileUpload sf=new ServletFileUpload(factory);
//2遍历所有的FileItem
try {
List<FileItem>formData=sf.parseRequest(request);
Painting painting=new Painting();
for(FileItem fi:formData) {
if(fi.isFormField()) {
//System.out.println("普通输入项"+fi.getFieldName()+fi.getString());
switch(fi.getFieldName()) {
case "pname":
painting.setPname(fi.getString("utf-8"));
break;
case "category":
painting.setCategroy(Integer.parseInt(fi.getString("utf-8")));
break;
case "price":
painting.setPrice(Double.parseDouble(fi.getString("utf-8")));
break;
case "description":
painting.setDescription(fi.getString("utf-8"));
break;
default:
break;
}
}else {
System.out.println(fi.getFieldName());
//3文件保存到服务器目录
String path="C:\\Users\\user\\Desktop\\Java\\New_Eclipseworkspace\\mgallery\\WebContent\\upload";
System.out.println(path);
//String fileName="test.jpg";
String fileName=UUID.randomUUID().toString();
//fi.getName()得到原始文件名
String suffix=fi.getName().substring(fi.getName().lastIndexOf("."));
fi.write(new File(path,fileName+suffix));
painting.setPreview("/upload/"+fileName+suffix);
}
}
paintingService.create(painting);//新增功能
response.sendRedirect("/management?method=list");//返回列表页
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
package service;
import java.util.List;
import dao.PaintingDao;
import entity.Painting;
import utils.PageModel;
public class PaintingService {
private PaintingDao paintingDao=new PaintingDao();
public PageModel pagination(int page,int rows,String...category) {
if(rows==0) {
throw new RuntimeException("无效的rows参数");
}
if(category.length==0||category[0]==null) {
return paintingDao.pagination(page, rows);
}else {
return paintingDao.pagination(Integer.parseInt(category[0]), page, rows);
}
}
public void create(Painting painting) {
paintingDao.create(painting);
}
public static void main(String[] args) {
PaintingService paintingService=new PaintingService();
PageModel pageModel=paintingService.pagination(2, 6);
List<Painting> paintingList=pageModel.getPageData();
for(Painting painting:paintingList) {
System.out.println(painting.getPname());
}
}
}
package dao;
import java.util.ArrayList;
import java.util.List;
import entity.Painting;
import utils.PageModel;
import utils.XmlDataSource;
public class PaintingDao {
public PageModel pagination(int page,int rows){
List<Painting>list=XmlDataSource.getRawData();
PageModel pageModel=new PageModel(list,page,rows);
return pageModel;
}
public PageModel pagination(int category,int page,int rows) {
List<Painting> list=XmlDataSource.getRawData();
List<Painting> categoryList=new ArrayList();
for(Painting p:list) {
if(p.getCategroy()==category) {
categoryList.add(p);
}
}
PageModel pageModel=new PageModel(categoryList,page,rows);
return pageModel;
}
public void create(Painting painting) {
XmlDataSource.append(painting);
}
}
package utils;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.io.Writer;
import java.net.URLDecoder;
import java.util.ArrayList;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;
import entity.Painting;
/**
* 数据源类,将XML文件解析为Java对象
* @author user
*
*/
public class XmlDataSource {
//通过static静态关键字保证数据全局唯一
private static List<Painting> data=new ArrayList();
private static String dataFile;
static {
//得到patinting.xml文件完整物理路径
dataFile=XmlDataSource.class.getResource("/painting.xml").getPath();
reload();
}
public static List<Painting> getRawData(){
return data;
}
private static void reload() {
URLDecoder decoder=new URLDecoder();
try {
dataFile=decoder.decode(dataFile,"UTF-8");
System.out.println(dataFile);
//利用Dom4j对XML进行解析
SAXReader reader=new SAXReader();
//1获取Document文档对象
Document doc=reader.read(dataFile);
//2Xpath得到XML节点集合
List<Node> nodes=doc.selectNodes("/root/painting");
data.clear();
for(Node node:nodes) {
Element ele=(Element)node;
String id=ele.attributeValue("id");
String pname=ele.elementText("pname");
Painting painting=new Painting();
painting.setId(Integer.parseInt(id));
painting.setPname(pname);
painting.setCategroy(Integer.parseInt(ele.elementText("category")));
painting.setPrice(Double.parseDouble(ele.elementText("price")));
painting.setPreview(ele.elementText("preview"));
painting.setDescription(ele.elementText("description"));
data.add(painting);
//System.out.println(id+":"+pname);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void append(Painting painting) {
//1读取XML文档得到Document对象
SAXReader reader=new SAXReader();
Writer writer=null;
try {
Document doc=reader.read(dataFile);
//2创建新的painting节点
Element root=doc.getRootElement();
Element p=root.addElement("painting");
//3创建painting结点的各个子节点
p.addAttribute("id",String.valueOf(data.size()+1));
p.addElement("pname").setText(painting.getPname());;
p.addElement("category").setText(painting.getCategroy().toString());
p.addElement("price").setText(painting.getPrice()+"");
p.addElement("preview").setText(painting.getPreview());
p.addElement("description").setText(painting.getDescription());
//4写入XML完成追加操作
writer=new OutputStreamWriter(new FileOutputStream(dataFile),"utf-8");
doc.write(writer);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
if(writer!=null) {
try {
writer.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
reload();//内存与文件的数据一致
}
}
public static void main(String[] args) {
//new XmlDataSource();
//List<Painting> ps=XmlDataSource.getRawData();
//System.out.println(ps);
Painting p=new Painting();
p.setPname("test");
p.setCategroy(1);
p.setPrice(3800);
p.setDescription("111");
p.setPreview("/upload/10.jpg");
XmlDataSource.append(p);
}
}
正在回答
同学你好,图片不能预览是因为同学将图片上传到了项目的upload文件夹下了。应该上传到Tomcat中部署项目的upload文件夹下。
参考代码如下:
如果我的回答解决了你的疑惑,请采纳!祝学习愉快~
- 参与学习 人
- 提交作业 9401 份
- 解答问题 16556 个
综合就业常年第一,编程排行常年霸榜,无需脱产即可学习,北上广深月薪过万 无论你是未就业的学生还是想转行的在职人员,不需要基础,只要你有梦想,想高薪
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星