语言:java,web:jsp.
问题描述
在一个xx工程中,图片放在xx\WebContent\images下面
比如1.jpg。
通过某些处理比如把ppt文件转化成jpg格式放在此文件夹下,在读取该文件夹下的图片
这时不刷新eclipse工程图片就不会显示。
正常读取的过程是我把图片的url放到标签img 中的src下,比如“xx\WebContent\images\1.jpg”
读取之后的路径为http://localhost:8080/xx\WebContent\images\1.jpg
此时能把路径读取出来,但是只要是不刷新eclipse就不能读取该图片。
请教用什么方式能把图片读取出来
问题描述
在一个xx工程中,图片放在xx\WebContent\images下面
比如1.jpg。
通过某些处理比如把ppt文件转化成jpg格式放在此文件夹下,在读取该文件夹下的图片
这时不刷新eclipse工程图片就不会显示。
正常读取的过程是我把图片的url放到标签img 中的src下,比如“xx\WebContent\images\1.jpg”
读取之后的路径为http://localhost:8080/xx\WebContent\images\1.jpg
此时能把路径读取出来,但是只要是不刷新eclipse就不能读取该图片。
请教用什么方式能把图片读取出来
http://localhost:8080/MyProject/resources/images/xxx.png,你是不是目录没有搞对啊?WebContent是根目录,不应该写在浏览器地址栏中的,
要访问WebContent目录可以,String webRoot = request.getSession().getServletContext().getRealPath("/");用这句话就可以读出WebContent的真实目录。
Eclipse项目中的文件经过refresh才能进入Tomcat。
当你直接发布到独立的Tomcat Server中,不在Eclipse中运行Tomcat的时候,就正常了。
就是说我把图片放在了这个路径下MyProject/resources/images/xxx.png,
我用这个取
<img src="/images/xxx.png" width="100" height="100" alt="" />
得出http://localhost:8080/MyProject/resources/images/xxx.png,
。正常来说这个图片已经存在于这个images下的话就可以取出来。
但时候后来增加的图片在此文件夹下就不能读出来,同样的路径。
String webRoot = request.getSession().getServletContext().getRealPath("/");
你写到这个webRoot目录去了吗?Tomcat发布工程,发布的目录是一个临时目录,不是tomcat的webapps目录下面,所以有可能是你的图片没有写到正确的目录里。
而是放到通过webRoot获得的真实路径下就能直接读取出图片来了
图片怎那么变名称都无所谓也不用刷eclipse
<img src="/images/xxx.png" width="100" height="100" alt="" />这两句话是有区别的,你懂的,读图片的时候别取错了,${pageContext.request.contextPath}这个是需要加上的。
测试嘛,
你可以在JSP页面中加入
<%= application.getRealPath() %>
找出Web应用的真实部署目录,然后将图片拷贝到这个目录下的images目录中,不要拷贝到Eclipse项目中了。
我是保存在工程的/resources/images/下面了,
实际应该保存到通过webroot获取的真实路径下就可以自由取出来了对巴?
但是这个真实路径是个临时文件夹把?
能确保上传到/resources/images/下面的图片一直存在么?
比如一个人上传了图片,别人也能看到么?
和你是不是在webContent目录或什么目录没多大关系。。关键是myeclipse没有自动构建一次1. 一般情况下,我们修改了文件名称,保存一下就行了。。必须myeclipse设置自动构建的。
2. 要么就是设置了自动构建,但是修改了名称未保存这是eclipse工具的机制必须要这么干
而且当你正式部署环境的时候,目录也不是临时的了,生成就是生成了。现在是临时的目录是因为你用Eclipse开发,他就这样,发布工程就用一个临时的目录。正式环境就不这样了。要是想大家一起测试,就得像Keitas一样,部署到真正的生产环境中去,大家访问一个机器来测试。
那就是说我保存的位置还是正确的,在MyProject/resources/images下面
我读取的路径也是正确的,
只是必须要重新构建一次工程
即时我用="${pageContext.request.contextPath}/去读取图片
只要没构建就读取不出来被
楼主的版本是不是低了点?
他的情况是程序运行时,生成的测试图片,类似图片上传。不是直接复制到Eclipse中去得
<img src="<%=request.getContextPath()%>+/resources/images/2/JPG" />
这样得出的图片的路径是
http://localhost:8080/SYNCLIP/images/study/2.JPG
我保存到了
MyProject/resources/images下面
如果我把保存的图片改称test2.jpg
img里面对应更改,不刷新不加载就不显示test2.jpg
<img src="<%=request.getContextPath()%>+/resources/images/2.jpg" />这里request.getContextPath() 应该等于 /SYNCLIP所以浏览器的地址应该是
http://localhost:8080/SYNCLIP/resources/images/2.jpg图片只是保存在了临时目录中,Eclipse中应该没有才对。
你后复制的这两个图片即时获取到正确的路径也无法显示的,而其他的图片可以显示
因为他发不到了tomcat下了
实际上就是工程原有的一些图片都放到了images下,我只是把转化的图片也放到了那个下面
然后读取原来的就能读取出来,后来工程美关闭的时候生成在此文件夹下的图片就没有读出来,
我觉得还是加载的问题,就像你说的在运行环境下可能就没事了,在eclipse里面就要重新加载一次。
要不然图片肯定不会到临时的那个文件下的。就好比这个路径下如果不加载就不会有图片
xxxx.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\SYNCLIP
你可以看一下33楼,我贴出来的代码
D:\eclipse工程名是redwellgroup-work,在
D:\eclipse\workspace\redwellgroup-workTomcat发布工程生成的临时目录在
D:\eclipse\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\redwellgroup-work\你生成图片要生成到
D:\eclipse\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\redwellgroup-work\resources\image\xxx.png网页访问要
<img src="${pageContext.request.contextPath}/resources/image/xxx.png" />
不同的老师上传不同的pdf文件解析成图片然后放到页面处理一下
变成另外一种形式的讲解材料。就是这个主要目的。所以pdf解析出来的图片
要保存到一个地方。。不是临时的
楼主不希望做完的工作丢失,但是如果说它是项目的一部分,似乎也比较勉强。
觉得楼主可以将图片保存在不相干的目录中(既不是Tomcat RealPath,也不是项目下的目录),用一个Servlet提供这些图片到页面。
你放到一个服务器上的话,就是指定一个固定的路径
那么不重新加载eclipse工程就无法显示图片
绕了一个圈
图片放在服务器上。
你在本地写的时候就必须要加载一次工程的内容
要是到运行环境应该就不存在这个问题了
所以我想找更好的解决方式。这些图片不是固定的
是把这些图片的url保存到db中,需要的时候进行调用的
我就是从db中读取的路径,而这个路径是我解析pdf保存到db中的
只是这个路径能读取出来,但是不能读取到那个图片,归根结底是因为
我把文件保存到了eclipse工程下的文件夹中了,而不是保存到真实路径.
.metadata\.plugins\org.eclipse.wst.server.core\tmp0\下面,
所以只有重新加载工程才会在次把保存到eclipse工程下的图片加载到真实路径下
所以我一直取不出来图片。即使放到服务器上估计也是这个效果