图片上传成功 目录里有图片 但是网页不显示
来源: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;
}
}
F:\IDEA Files\Advanced_Work\src\main\webapp\img\888720d2102a415faf45e81e2282ebc7.png
3回答
好帮手慕小尤
2020-03-25
同学你好,1. 同学将图片固定的项目里了,并没有上传到服务器上,建议同学修改为getServletContext().getRealPath("/upload");,这样到时候就是发布到部署之后的项目里的指定文件夹里了,然后在存路径的时候进行拼接。如下所示:
2. 有的电脑不识别真实路径,并且项目发布后,是在tomcat中的。应该像老师一样,到时候会上传到tomcat部署后的项目里。同学可以查看一下老师讲解的3-4与3-5的课程,查看具体语法。
如果我的回答解决了你的疑惑,请采纳,祝学习愉快~
好帮手慕小尤
2020-03-24
同学你好,同学可以尝试在图片前面添加项目名。如下所示:
<td><img src="/Advanced_Work(项目名)/img/${c.img}"></td>
如果我的回答解决了你的疑惑,请采纳,祝学习愉快~
好帮手慕小脸
2020-03-24
同学你好,404 是请求资源路径不存在,同学的图片路径是在
F:\IDEA Files\Advanced_Work\src\main\webapp\img\
而路径找的是
/Advanced_Work_war/img/
建议同学将路径更改一致后,在重新尝试运行。
祝学习愉快~
相似问题