图片上传成功 目录里有图片 但是网页不显示

来源:6-2 项目作业

VN666

2020-03-23 23:50:54

<c:forEach items="${applicationScope.bookList}" var="c" varStatus="idx">
   <tr id="tr1">
       <td>${idx.index + 1}</td>
       <td>${c.id}</td>
       <td>${c.book_name}</td>
       <td>${c.type}</td>
       <td>¥${c.price}</td>
       <td><img src="img/${c.img}"></td>
       <td>
           <a href="${pageContext.request.contextPath}/UpdateBook_Servlet?id=${c.id}">修改</a>
           <a href="${pageContext.request.contextPath}/DeleteBook_Servlet?id=${c.id}">删除</a>
       </td>
       <!--在循环显示数据时,此处的book0001可以用EL表达式进行替换-->
   </tr>
</c:forEach>


package com.edu.Servlet;

import com.edu.domain.Book;
import com.edu.domain.Book_type;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

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 java.io.*;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

@WebServlet("/add.do")
public class AddBook_Servlet extends HttpServlet {
   @Override
   protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       List<Book> bookList = (List<Book>)req.getServletContext().getAttribute("bookList");
       Book book = new Book();
       DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();
       Map<String,String> map = new HashMap<String,String>();
       ServletFileUpload fileUpload = new ServletFileUpload(diskFileItemFactory);
       try {
           List<FileItem> list = fileUpload.parseRequest(req);
           for (FileItem fileItem:list){
               if(fileItem.isFormField()){
                   String name = fileItem.getFieldName();
                   String value = fileItem.getString("UTF-8");
                   map.put(name,value);
               }
               else{
                   String fileName = fileItem.getName();
                   String uuidFileName = getFileName(fileName);
                   InputStream is = fileItem.getInputStream();
                   String path = "F:\\IDEA Files\\Advanced_Work\\src\\main\\webapp\\img\\";
                   System.out.println(path);
                   String url = path + uuidFileName;
                   System.out.println(uuidFileName);
                   map.put("path",uuidFileName.toString());
                   OutputStream os = new FileOutputStream(url);
                   int len = 0;
                   byte[] b = new byte[1024];
                   while ((len = is.read(b)) != -1)
                       os.write(b,0,len);
                   is.close();
                   os.close();
               }
           }

       } catch (FileUploadException e) {
           e.printStackTrace();
       }
       String id = map.get("bookId");
       book.setId(id);
       book.setBook_name(map.get("bookName"));
       List<Book_type> bookTypes = new ArrayList<Book_type>();
       for (int i = 0; i < bookTypes.size(); i++){
           if(bookTypes.get(i).getId().equals(map.get("categoryId"))){
               book.setType(bookTypes.get(i).getName());
               break;
           }
       }
       book.setPrice(Double.parseDouble(map.get("bookPrice")));
       book.setImg(map.get("path"));
       int len = bookList.size();
       boolean flag = true;
       for (int i = 0; i < len; i++){
           if(bookList.get(i).getId().equals(id)){
               bookList.set(i,book);
               flag = false;
               break;
           }
       }
       if(flag)
           bookList.add(book);
       req.getServletContext().setAttribute("bookList", bookList);
       System.out.println(bookList);
       req.getRequestDispatcher("/bookList.jsp").forward(req,resp);
   }

   public static String getFileName(String fileName){
       int index = fileName.lastIndexOf(".");
       String exName = fileName.substring(index);
       String uuidFileName = UUID.randomUUID().toString().replace("-","")+exName;
       return uuidFileName;
   }
}

http://img.mukewang.com/climg/5e78da820984196607100192.jpg


F:\IDEA Files\Advanced_Work\src\main\webapp\img\888720d2102a415faf45e81e2282ebc7.png

http://img.mukewang.com/climg/5e78da82095b447905980271.jpg


写回答

3回答

好帮手慕小尤

2020-03-25

同学你好,1. 同学将图片固定的项目里了,并没有上传到服务器上,建议同学修改为getServletContext().getRealPath("/upload");,这样到时候就是发布到部署之后的项目里的指定文件夹里了,然后在存路径的时候进行拼接。如下所示:

http://img.mukewang.com/climg/5e7b375009fd51b506780268.jpg

2. 有的电脑不识别真实路径,并且项目发布后,是在tomcat中的。应该像老师一样,到时候会上传到tomcat部署后的项目里。同学可以查看一下老师讲解的3-4与3-5的课程,查看具体语法。

如果我的回答解决了你的疑惑,请采纳,祝学习愉快~

0

好帮手慕小尤

2020-03-24

同学你好,同学可以尝试在图片前面添加项目名。如下所示:

 <td><img src="/Advanced_Work(项目名)/img/${c.img}"></td>

如果我的回答解决了你的疑惑,请采纳,祝学习愉快~

0
hN666
h 加了以后还是不行
h020-03-25
共1条回复

好帮手慕小脸

2020-03-24

同学你好,404 是请求资源路径不存在,同学的图片路径是在

F:\IDEA Files\Advanced_Work\src\main\webapp\img\

而路径找的是

/Advanced_Work_war/img/

建议同学将路径更改一致后,在重新尝试运行。

祝学习愉快~

0
hN666
h 怎么更改?
h020-03-24
共1条回复

0 学习 · 9666 问题

查看课程