图片上传到tomcat后突然消失

文章转载:http://blog.csdn.net/helloworld1993/article/details/47661759

调试上传用户头像时看不见的功夫上传的图片就不见了,看了这篇文章恍然大悟!!!以上是一字不差地原文

-------------------------------------------------------------------------------------------------分哥线----------------------------------------------------------------------------------------------------------------------------------

最近在做一个Javaweb的项目,涉及到图片上传,并且需要将图片通过URL回显给JSP页面,在调试的时候发现,上传到tomcat的图片再重新部署之后就消失了。研究了半天发现才解决了。首先说一下,我为什么要将图片存放到tomcat服务器或者更直白点说是web工程目录下的原因:

项目中对于图片的处理在于用户上传比如自己的头像,上传后再查看时,就直接根据服务器的URL指定图片的位置去查看图片,通俗点就是jsp页面中的<img >标签的src属性的路径就直接指向服务器该图片存放的位置。鉴于这一点,所以将图片文件存放在了tomcat中,而不放在服务器磁盘文件系统中,这样前端JSP就可以直接通过URL访问到图片资源。

发现的问题:在调试的时候,我的开发环境十分通用,就是eclipse for jee ,服务器为tomcat7.0。在配置eclipse runtime服务器运行环境时,工程发布的位置选择的是直接将工程发布到tomcat的webapps目录下。配置过程如下:

1.在为eclipse添加到tomcat7.0服务器后,将服务器的工程全部remove掉,如下图:

remove all,然后右键clean一下,这时再open,如下图

在server locations下选择第二个,这时工程在ADD到服务器时就直接到了tomcat 的webapps目录下了。

遇到的问题:发现上传的图片在改动eclipse上的代码的时候,也就是重新部署后,tomcat下的webapps中的工程目录下的图片全部没有了,很奇怪,经过研究发现,原因如下:

我们在Java代码中上传图片时,图片的路径是通过代码

request.getSession().getServletContext().getRealPath("/img")

来获取路径的,而这句代码返回的路径是tomcat中webapps目录下的工程路径,图片就直接保存到了tomcat中。

当我们重新发布工程的时候,tomcat其实是先将原来的工程删掉,然后再将改动过的新的工程放上去。而改动过的新的工程师来自与我们eclipse的工作空间中的工程,这就也难怪了,因为我们是把图片直接上传到的tomcat服务器下,而不是放到工作空间的工程目录下,自然重新部署后图片就没了。

解决办法:

归根到底的原因就是因为

request.getSession().getServletContext().getRealPath("/img")

这句代码搞的鬼,所以在调试时,我们在Java代码中保存上传的图片位置时将图片的保存路径应该保存在eclipse工作空间的目录下,如:

String path =  "E:\\program\\eclipse project\\Server\\WebContent\\img";

这样,图片在上传到该工作空间后,因为项目发生了改变,eclipse会再次发布工程,这时图片便会同步到tomcat服务器中,这时,我们前端jsp页面也就可以通过URL定位到图片了。

注意的地方:

归根到底这些问题其实还是因为我们是在调试的工程中,发布后肯定是不会出现这些问题的。因为你想想我们的web工程一般是发布到Linux下,发布了之后你的tomcat服务器只有关闭和打开,而不会对工程重新部署,自然也就不会出现这些问题。然后这也同时出现了另外一个问题,就是我们的web系统是在linux下,也不会有eclipse环境,那也就更不用谈什么工作空间了,所以如果在代码中String path =  "E:\\program\\eclipse project\\Server\\WebContent\\img";这么写系统肯定会报错咯。所以最终来说,改成这样也只是权宜之计,方便我们在调试的时候用的,到项目正式发布的时候需要我们再将路径改成request.getSession().getServletContext().getRealPath("/img")的。

时间: 2024-10-14 05:18:38

图片上传到tomcat后突然消失的相关文章

【Servlet】利用Servlet3.0标准与JSTL表达式实现文件上传系统,支持图片上传后显示

伴随着JDK1.6一起出现的Servlet3.0标准,使得JSP的文件上传系统不再艰难,此前在JSP的文件上传系统需要<[Jsp]使用jspsmartupload完成简单的文件上传系统>(点击打开链接)类似这样的插件才能完成的文件上传系统,还不支持中文,使得各位程序猿掏空心思才能解决这个问题.现在Servlet3.0对文件上传的方法进行封装,无须分块就可以实现.而且Servlet3.0还不用类似<[Servlet]最简单的Servlet JavaWeb程序>(点击打开链接)在web

html + js 实现图片上传,压缩,预览及图片压缩后得到Blob对象继续上传问题

先上效果 上传图片后(设置了最多上传3张图片,三张后上传按钮消失) 点击图片放大,可以使用删除和旋转按钮 (旋转功能主要是因为ios手机拍照后上传会有写图片被自动旋转,通过旋转功能可以调正) html页面 需要引入weui.min.css 不然没法渲染样式, 将下面的代码放在需要上传文件的地方就行了,如果不需要图片旋转功能, 可以直接删掉那个div, 改不改js无影响 addPhoto.html <!--图片缩略图--> <div class="weui-cells weui-

移动端图片上传解决方案localResizeIMG先压缩后ajax无刷新上传

现在科技太发达,移动设备像素越来越高,随便一张照片2M+,但是要做移动端图片上传和pc上略有不同,移动端你不能去限制图片大小,让用户先处理图片再上传,这样不现实.所以理解的解决方案就是在上传先进行图片压缩,然后再把压缩后的图片上传到服务器. 一翻google之后,发现了localResizeIMG,它会对图片进行压缩成你指定宽度及质量度并转换成base64图片格式,那么我们就可以把这个base64通过ajax传到后台,再进行保存,先压缩后上传的目的就达到了. 处理过程 LocalResizeIM

百度UEditor图片上传、SpringMVC、Freemarker、Tomcat、Nginx、静态资源

个人官网.公司项目都需要 可视化编辑器,百度UEditor做得很不错,就用的这个.项目后台用到了SpringMVC.Freemarker,开发过程中部署在Jetty,线上部署用Tomcat,最后可能配置Nginx代理.     在实际使用过程中,遇到了太多的问题,因此有必要梳理和总结下. 1. 先说百度UEditor在Java环境中的使用:1.1   Html页面或者Freemarker模版里,引入百度UEditor的相关JS和CSS,如下 <script type="text/javas

v9切换ueditor后图片上传路径问题 改成绝对路径

使用V9切换成ueditor编辑器后,图片上传路径显示的是相对路径,同时会把content字段第一张图这个路径同步到缩略图的thumb字段.thumb字段如果是相对路径的话,前端就不能进行裁剪,APP或者其他应用也不能调用. 于是修改. 我用的是1.4.3版本 找到编辑器目录下的/php/Uploader.class.php文件. 找到getFileInfo()方法,修改成如下代码     public function getFileInfo()     { $dangqian_host = 

视频(其他)下载+tomcat 配置编码+图片上传限制大小

视频下载:前台 jsp function downVideo(value,row,index){ return '<a href="<%=basePath%>admin/video/video!fileDown.ds?uname='+row.uname+'&filepath='+value+'">下载</a>'; } 后台java : action: public void fileDown() { FileUtil.download(fil

图片上传后及时预览

<!DOCTYPE html> <html> <head> <meta content="charset=utf-8" /> <!--设置图片上传后预览的div样式--> <style type="text/css"> *{ float:left; margin:0; } body>div{ width:200px; height:225px; text-align:center; } #

图片上传后即时预览

<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> //设置图片上传后预览的div样式 <style type="text/css"> #preview, .img, img { width: 200px; height: 200px; } #

动端图片上传解决方案localResizeIMG先压缩后ajax无刷新上传

现在科技太发达,移动设备像素越来越高,随便一张照片2M+,但是要做移动端图片上传和pc上略有不同,移动端你不能去限制图片大小,让用户先处理图片再上传,这样不现实.所以理解的解决方案就是在上传先进行图片压缩,然后再把压缩后的图片上传到服务器. 一翻google之后,发现了localResizeIMG,它会对图片进行压缩成你指定宽度及质量度并转换成base64图片格式,那么我们就可以把这个base64通过ajax传到后台,再进行保存,先压缩后上传的目的就达到了. 处理过程 LocalResizeIM