图片无法加载

图片无法加载

if(session.getAttribute("user")!=null){
    User user = (User)session.getAttribute("user");
   System.out.println(user.getPath());
   int idx = user.getPath().lastIndexOf("\\");
   String fileName = user.getPath().substring(idx+1);
   System.out.println(fileName);

path和fileName两个变量都是正确输出的,显然是路径名有问题,照着老师的写法是

<td align="center"><img src="/reg_login/upload/<%=fileName%>" /></td>

我也是这么写的,但是加载失败,显然是路径名称的问题,因为我用的是MAC的Idea写的代码

所以请教MAC的IDEA怎么配置这个路径?


正在回答

登陆购买课程后可参与讨论,去登陆

6回答

我的意思是在对user对象进行封装数据时,将uuidFileName封装到user类中的path属性中,你也可以在User类中定义一个FileName属性也可以,将uuidFileName封装到user对象中,两种方法皆可以。

http://img1.sycdn.imooc.com//climg/5bcef29c00017cec05560267.jpg

然后在jsp页面中使用下面的代码来获取图片,这里的user.getPath就是图片的唯一名称。祝学习愉快~

<td align="center"><img src="<%=basepath%>/upload/<%=user.getPath()%>" /></td>

  • 风岚醉 提问者 #1
    成功了,多谢老师。
    2018-10-23 19:53:42
提问者 风岚醉 2018-10-23 17:32:58

原来的代码是

String uuidFileName = UploadUtils.getUUIDFileName(fileName);
InputStream is = fileItem.getInputStream();
String path = this.getServletContext().getRealPath("/upload");
url = path+File.separator+uuidFileName;

意思是直接改成

String path = uuidFileName;

吗?

chrismorgen 2018-10-23 15:03:24

修改意见:

1、建议你使用 url = path+File.separator+uuidFileName;来存储图片,因为mac本与windows存储的路径不形同,这样能确保图片存在对应的mac系统的路径下。

2、可以看出,使用了url = path+File.separator+uuidFileName之后,在success.jsp页面中fileName的值也发生了改变,所以截取fileName的代码就不可以使用了(可以直接删除),建议你直接将uuidFileName存储在User类中的path中,此时的path值也就是uuidFileName,这样使用<%=basePath%>/upload/<User.getPath>,就可以获取图片了。如果有不理解的地方,可以继续提问,祝学习愉快~

提问者 风岚醉 2018-10-23 11:26:38

现在是这样:

<td align="center"><img src="<%=fileName%>" /></td>

结构(upload里是一堆之前上传的图片):

http://img1.sycdn.imooc.com//climg/5bce94b8000127e508341010.jpg

浏览器的检查元素:

http://img1.sycdn.imooc.com//climg/5bce94b90001058519201080.jpg


提问者 风岚醉 2018-10-19 11:07:33

图片还是没有加载,如图所示

首先路径和文件名都没有问题

http://img1.sycdn.imooc.com//climg/5bc94a03000181ca26500446.jpg

我也把代码改成了

<% 
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path;
%>
<td align="center"><img src="<%=basePath%>/upload/<%=fileName%>" /></td>

附一张火狐浏览器的截图,路径确实输出了,但是报的错误是不能加载图片

http://img1.sycdn.imooc.com//climg/5bc94a040001ed4519201080.jpg


  • 提问者 风岚醉 #1
    另外我去访问了一下输出的那个路径,图片确实传进去了。 我用的是MACBook,Idea,是不是要做什么特殊配置?
    2018-10-19 11:12:48
  • 慕娘56302749 回复 提问者 风岚醉 #2
    你把 RegistServlet中的 url = path+"\\"+uuidFileName; 改为 url = path+File.separator+uuidFileName; 试试。
    2018-10-19 13:59:57
  • 提问者 风岚醉 回复 慕娘56302749 #3
    没有成功,不过输出里的\变成了/,看上去舒服了。
    2018-10-19 14:06:39
chrismorgen 2018-10-19 09:45:45

建议你使用<%=basePath%>试试,通过访问网页的全路径来访问项目资源,可以在页面中添加如下代码,这中访问资源的适配性高,可以避免资源路径出现错误,

<% 
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path;
%>

然后使用如下代码获取图片,如果还有问题,可以再次提问,祝学习愉快~

<td align="center"><img src="<%=basePath%>/upload/<%=fileName%>" /></td>


问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
Java Web基础入门2018版
  • 参与学习       716    人
  • 提交作业       185    份
  • 解答问题       1363    个

会Java?懂前端基础?想学后台开发?那么,赶快来学习《Java Web入门》路径吧。本路径主要介绍Java Web的基础知识,并配有大量案例,定会让你收获多多!

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师