当前位置:编程学习 > JAVA >>

jsp上传图片,重启tomcat后图片和文件夹自动删除,求解决办法。

是这样的。
我写了一个图片上传的方法,上传时,判断没有这个目录就自动建立一个。
然后开始些日图片,就是上传图片,能成功。
但是,重启项目,或者清理缓存之后,图片和文件夹就会自动被删除,不见了。
求解决办法!!!
或者有更好的上传方法也行。急。。。。。。。 --------------------编程问答-------------------- 判断没有这个目录就自动建立一个。
应该是你代码有问题,估计是每次都新建了一个目录将原来的覆盖了。
--------------------编程问答-------------------- 不是的。的确是自动删除了。
现在想起一种虚拟目录的方法,有懂的吗?就是修改tomcat的server.xml,求详细讲解。
--------------------编程问答-------------------- <Host>之间

<Context path="/img" docBase="D:/images" /> --------------------编程问答-------------------- String path = request.getSession().getServletContext().getRealPath("/img"); --------------------编程问答--------------------
引用楼主 tokissing 的回复:
是这样的。
我写了一个图片上传的方法,上传时,判断没有这个目录就自动建立一个。
然后开始些日图片,就是上传图片,能成功。
但是,重启项目,或者清理缓存之后,图片和文件夹就会自动被删除,不见了。
求解决办法!!!
或者有更好的上传方法也行。急。。。。。。。


第一点:首先确定下你的目录是否创建在了服务器下面的临时目录中了,如果是的话,建议改路径。
第二点:检查下你的程序,是否有删除文件和目录的操作。 --------------------编程问答-------------------- 这个到底解决了没有???我也遇到这个问题,急啊 !!!!! --------------------编程问答-------------------- 具体是怎么上传的,有很多因素都会照成这样的结果。比如路径不合理、缓存没有flush等。。。。
--------------------编程问答-------------------- 一般服务器都不会关闭的,关了也可以啊,只要不要重新部署就没事了,否则是会删除原来所有文件! --------------------编程问答-------------------- 我也是这个问题,想了几天了,还没解决 --------------------编程问答-------------------- 很有可能是当临时目录了。

还有如果在eclipse中创建的目录,不会放到tomcat是,而且eclispe的临时目录是在

Workspaces\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\work\Catalina\localhost

像上面的路径下 --------------------编程问答-------------------- 上传的文件 最好不要放在tomcat下面,应该动态配置文件上传目录,这样的好处不用多说了吧 --------------------编程问答-------------------- 我也遇到个这个问题,用了好久才解决,你到网上下载文件的jar包就可以了。 --------------------编程问答-------------------- request.getSession().getServletContext()
.getRealPath("/")
+ File.separator
+ "psd"
+ File.separator
+ "homePages"
+ File.separator + df.format(new Date()) + fileName;


在服务器上建个目录,直接传到服务器上 --------------------编程问答--------------------
引用 11 楼 bangis 的回复:
上传的文件 最好不要放在tomcat下面,应该动态配置文件上传目录,这样的好处不用多说了吧
重启后也没删掉啊,动态配置是不是为了在虚拟机先寻址 --------------------编程问答--------------------
引用 8 楼 weihui5368452 的回复:
一般服务器都不会关闭的,关了也可以啊,只要不要重新部署就没事了,否则是会删除原来所有文件!
是的 --------------------编程问答-------------------- 你新建的目录是在WORK下还是WEBROOT下? --------------------编程问答--------------------
引用楼主 tokissing 的回复:
是这样的。
我写了一个图片上传的方法,上传时,判断没有这个目录就自动建立一个。
然后开始些日图片,就是上传图片,能成功。
但是,重启项目,或者清理缓存之后,图片和文件夹就会自动被删除,不见了。
求解决办法!!!
或者有更好的上传方法也行。急。。。。。。。

不知道楼主重启项目或清理缓存是如何来操作的,如果之前上传都是没问题的,只是在重启项目或清理缓存之后出现这种现象,也有可能是你的操作有问题吧。
是不是楼主点击过菜单Project里面的Clean呢?如果是的话,问题就在此了。 --------------------编程问答-------------------- 我也遇到了 在tomcat下webroot目录里创建的文件夹关机后第二次开机创建的文件夹会消失 求高手帮忙 --------------------编程问答-------------------- 同样遇见过这种问题。。。 --------------------编程问答-------------------- 大概是该文件夹下面没东西
只要随便在那个文件夹里放个东西就行
比如txt文档 --------------------编程问答-------------------- 都没有人解决这个问题!

我云! --------------------编程问答-------------------- 我知道了   如果你是用MyEclips 开发的话 因为上传的是在webapp下面  而源文件下没有那个文件 重启后重新部署 就把本地没有的文件在远端删除  所以 重启后就没了 --------------------编程问答-------------------- 重新redeploy的时候  tomcat 会同步你本地的文件 因为你本地没有相应的文件夹 自然导致文件丢失。
这只是在开发过程中会遇到的问题 实际应用中 tomcat 只会 startup.bat/sh shutdown.bat/sh
楼主只需在本地建立相应的目录即可 --------------------编程问答-------------------- 你按这几个步骤去做,就能解决问题:
1.把/tomcat/webapps/目录清空,删掉该文件夹的所有内容,
2.修改/tomcat/conf/web.xml文件:
  
<servlet>
        <servlet-name>default</servlet-name>
        <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
        <init-param>
            <param-name>debug</param-name>
            <param-value>0</param-value>
        </init-param>
        <init-param>
            <param-name>listings</param-name>
            <param-value>true</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>


3.修改/tomcat/conf/server.xml文件:
  
<Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true"
            xmlValidation="false" xmlNamespaceAware="false">

        <!-- SingleSignOn valve, share authentication between web applications
             Documentation at: /docs/config/valve.html -->
        <!--
        <Valve className="org.apache.catalina.authenticator.SingleSignOn" />
        -->

        <!-- Access log processes all example.
             Documentation at: /docs/config/valve.html -->
        <!--
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"  
               prefix="localhost_access_log." suffix=".txt" pattern="common" resolveHosts="false"/>
        -->
<!----><Context path="/ser" docBase="D:\project\myProject\editor\WebRoot"></Context>
<!--<Context path="/mvc" docBase="D:\project\myProject\area\WebRoot"></Context>-->
      </Host>

其实就是给工程配置虚拟路径,这样tomcat在启动的时候直接找到你的工程了,
你上传的图片就不会跑到/tomcat/webapps/目录,而是直接到了你的工程里,
不管你怎样重启项目,或者清理缓存,上传的文件依然存在! --------------------编程问答-------------------- 楼上的可以解决吗 ? 把/tomcat/webapps/目录清空,删掉该文件夹的所有内容!!!
把内容删了会不会找不到项目啊???
--------------------编程问答-------------------- 文件最好不要放在tomcat目录下。。 --------------------编程问答--------------------
引用 25 楼  的回复:
楼上的可以解决吗 ? 把/tomcat/webapps/目录清空,删掉该文件夹的所有内容!!!
把内容删了会不会找不到项目啊???


请相信这一点,鄙人自开发到现在,一直都是这么部署项目的,
从来没出现过lz描述的问题,
--------------------编程问答-------------------- 不需要修改/tomcat/conf/web.xml文件的,那样修改只是让tomcat将该目录下的所有文件列出来而已 --------------------编程问答-------------------- 放到服务器的根目录的文件夹啊~ --------------------编程问答--------------------
引用 24 楼 s478853630 的回复:
你按这几个步骤去做,就能解决问题:
1.把/tomcat/webapps/目录清空,删掉该文件夹的所有内容,
2.修改/tomcat/conf/web.xml文件:
  Java code12345678910111213<servlet>        <servlet-name>default</servlet-name>        <servlet-cla……

可以把这个文件夹创建到你的项目里面吗? --------------------编程问答--------------------

24楼的方法可以一试 --------------------编程问答--------------------
引用 30 楼 hepeng154833488 的回复:
可以把这个文件夹创建到你的项目里面吗?……


行不行,你试试便知道了,
部署web项目,别在eclipse中点来点去的部署,那样虽然快捷,但实际上是复制项目到tomcat,有很多弊端!
修改tomcat的配置文件正好解决这个问题,
你反过来想一想,javaweb项目的服务器一般都是linux系统,linux系统中不可能安装eclipse,
所以在linux系统中部署项目,就是修改配置文件,然后运行命令启动tomcat,

这样部署后,request.getSession().getServletContext().getRealPath("/");得到的是项目的WebRoot根目录,比如:D:\project\myProject\editor\WebRoot,上传文件时的文件夹自然就会创建在项目中,
如果你在eclipse中点来点去的部署,得到的却是tomcat的webapps根目录,文件夹就会创建在tomcat中,

我只能这样解释了,希望你能明白!
--------------------编程问答-------------------- 看了这么多回答,我的貌似可以 --------------------编程问答-------------------- 换种方法写 就行。 --------------------编程问答--------------------
引用 24 楼 s478853630 的回复:
你按这几个步骤去做,就能解决问题:
1.把/tomcat/webapps/目录清空,删掉该文件夹的所有内容,
2.修改/tomcat/conf/web.xml文件:
  
<servlet>
        <servlet-name>default</servlet-name>
        <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
        <init-param>
            <param-name>debug</param-name>
            <param-value>0</param-value>
        </init-param>
        <init-param>
            <param-name>listings</param-name>
            <param-value>true</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>


3.修改/tomcat/conf/server.xml文件:
  
<Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true"
            xmlValidation="false" xmlNamespaceAware="false">

        <!-- SingleSignOn valve, share authentication between web applications
             Documentation at: /docs/config/valve.html -->
        <!--
        <Valve className="org.apache.catalina.authenticator.SingleSignOn" />
        -->

        <!-- Access log processes all example.
             Documentation at: /docs/config/valve.html -->
        <!--
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"  
               prefix="localhost_access_log." suffix=".txt" pattern="common" resolveHosts="false"/>
        -->
<!----><Context path="/ser" docBase="D:\project\myProject\editor\WebRoot"></Context>
<!--<Context path="/mvc" docBase="D:\project\myProject\area\WebRoot"></Context>-->
      </Host>

其实就是给工程配置虚拟路径,这样tomcat在启动的时候直接找到你的工程了,
你上传的图片就不会跑到/tomcat/webapps/目录,而是直接到了你的工程里,
不管你怎样重启项目,或者清理缓存,上传的文件依然存在!

遇到好心人了,真是太谢谢您了,不过web.xml中的配置是什么作用呢,顺便问一下,我还是个菜鸟,以后 是不是有必要好好研究一下tomcat,谢谢您勒 --------------------编程问答-------------------- 虚拟路径resin的我会,tomcat的没去研究,你搜一下应该可以找到类似的结果 --------------------编程问答-------------------- 你肯定把上传图片的路径放在了tomcat/webapps/项目/下面。
那你每次部署了就在这下面生产相应文件夹,并且把上传的都放在这下面,如果你在myeclipse上删掉了你的部署,或者手动删掉部署,肯定图片什么的都没了。解决办法将上传路径改为其他的,远离tomcat的路径下。 --------------------编程问答--------------------
引用 24 楼 s478853630 的回复:
你按这几个步骤去做,就能解决问题:
1.把/tomcat/webapps/目录清空,删掉该文件夹的所有内容,
2.修改/tomcat/conf/web.xml文件:
  
<servlet>
        <servlet-name>default</servlet-name>
        <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
        <init-param>
            <param-name>debug</param-name>
            <param-value>0</param-value>
        </init-param>
        <init-param>
            <param-name>listings</param-name>
            <param-value>true</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>


3.修改/tomcat/conf/server.xml文件:
  
<Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true"
            xmlValidation="false" xmlNamespaceAware="false">

        <!-- SingleSignOn valve, share authentication between web applications
             Documentation at: /docs/config/valve.html -->
        <!--
        <Valve className="org.apache.catalina.authenticator.SingleSignOn" />
        -->

        <!-- Access log processes all example.
             Documentation at: /docs/config/valve.html -->
        <!--
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"  
               prefix="localhost_access_log." suffix=".txt" pattern="common" resolveHosts="false"/>
        -->
<!----><Context path="/ser" docBase="D:\project\myProject\editor\WebRoot"></Context>
<!--<Context path="/mvc" docBase="D:\project\myProject\area\WebRoot"></Context>-->
      </Host>

其实就是给工程配置虚拟路径,这样tomcat在启动的时候直接找到你的工程了,
你上传的图片就不会跑到/tomcat/webapps/目录,而是直接到了你的工程里,
不管你怎样重启项目,或者清理缓存,上传的文件依然存在!


我也遇到这个重启服务器就删除图片的的问题了,我想知道,如果这样配置,等到项目完成后部署时会不会有影响? --------------------编程问答--------------------
引用 24 楼 s478853630 的回复:
你按这几个步骤去做,就能解决问题:
1.把/tomcat/webapps/目录清空,删掉该文件夹的所有内容,
2.修改/tomcat/conf/web.xml文件:
  
<servlet>
        <servlet-name>default</servlet-name>
        <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
        <init-param>
            <param-name>debug</param-name>
            <param-value>0</param-value>
        </init-param>
        <init-param>
            <param-name>listings</param-name>
            <param-value>true</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>


3.修改/tomcat/conf/server.xml文件:
  
<Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true"
            xmlValidation="false" xmlNamespaceAware="false">

        <!-- SingleSignOn valve, share authentication between web applications
             Documentation at: /docs/config/valve.html -->
        <!--
        <Valve className="org.apache.catalina.authenticator.SingleSignOn" />
        -->

        <!-- Access log processes all example.
             Documentation at: /docs/config/valve.html -->
        <!--
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"  
               prefix="localhost_access_log." suffix=".txt" pattern="common" resolveHosts="false"/>
        -->
<!----><Context path="/ser" docBase="D:\project\myProject\editor\WebRoot"></Context>
<!--<Context path="/mvc" docBase="D:\project\myProject\area\WebRoot"></Context>-->
      </Host>

其实就是给工程配置虚拟路径,这样tomcat在启动的时候直接找到你的工程了,
你上传的图片就不会跑到/tomcat/webapps/目录,而是直接到了你的工程里,
不管你怎样重启项目,或者清理缓存,上传的文件依然存在!


<!----><Context path="/ser" docBase="D:\project\myProject\editor\WebRoot"></Context>请问这个路径的意思是? --------------------编程问答-------------------- D:\project\myProject\editor\WebRoot 这个路径是项目的web根目录,editor是项目名称, 那么D:\project\myProject\editor\src 就是你存放java文件的根目录了
/ser 就是项目应用的名称了,或者说是上下文路径,这个名称可以随意修改
如果你的tomcat端口是 8080, 那么项目的访问路径就是 http://localhost:8080/ser
上传时就会在D:\project\myProject\editor\WebRoot\ 目录中创建文件夹
不管你怎样重启项目,或者清理缓存,上传的文件依然存在, 因为上传的文件都已经存在于你的项目中
这样方式只需要部署一次,没有重新部署的说法

如果你是在eclipse中点来点去的部署项目,也就等于是把D:\project\myProject\editor\WebRoot目录的所有文件和文件夹都复制到了 /tomcat/webapps/editor/目录下,那么项目的访问路径就是 http://localhost:8080/editor
上传时就会在 /tomcat/webapps/editor/ 目录中创建文件夹
只要重新部署或清理缓存,上传的文件都烟消云散了
因为重新部署时,先删除 /tomcat/webapps/editor/ 目录,再复制一遍D:\project\myProject\editor\WebRoot目录的所有文件和文件夹

这回我真的已经讲的很详细了 --------------------编程问答--------------------
引用 40 楼 s478853630 的回复:
D:\project\myProject\editor\WebRoot 这个路径是项目的web根目录,editor是项目名称, 那么D:\project\myProject\editor\src 就是你存放java文件的根目录了
/ser 就是项目应用的名称了,或者说是上下文路径,这个名称可以随意修改
如果你的tomcat端口是 8080, 那么项目的访问路径就是 http://localhost:8080/ser
上传时就会在D:\project\myProject\editor\WebRoot\ 目录中创建文件夹
不管你怎样重启项目,或者清理缓存,上传的文件依然存在, 因为上传的文件都已经存在于你的项目中
这样方式只需要部署一次,没有重新部署的说法

如果你是在eclipse中点来点去的部署项目,也就等于是把D:\project\myProject\editor\WebRoot目录的所有文件和文件夹都复制到了 /tomcat/webapps/editor/目录下,那么项目的访问路径就是 http://localhost:8080/editor
上传时就会在 /tomcat/webapps/editor/ 目录中创建文件夹
只要重新部署或清理缓存,上传的文件都烟消云散了
因为重新部署时,先删除 /tomcat/webapps/editor/ 目录,再复制一遍D:\project\myProject\editor\WebRoot目录的所有文件和文件夹

这回我真的已经讲的很详细了

讲的很详细,在项目的目录下上传文件,这样在重新部署,启动服务的时候文件就不会丢失,如果在服务器下创建目录,重启或者部署都会造成文件的丢失。 --------------------编程问答--------------------
引用 24 楼 s478853630 的回复:
你按这几个步骤去做,就能解决问题:
1.把/tomcat/webapps/目录清空,删掉该文件夹的所有内容,
2.修改/tomcat/conf/web.xml文件:
  
<servlet>
        <servlet-name>default</servlet-name>
        <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
        <init-param>
            <param-name>debug</param-name>
            <param-value>0</param-value>
        </init-param>
        <init-param>
            <param-name>listings</param-name>
            <param-value>true</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>


3.修改/tomcat/conf/server.xml文件:
  
<Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true"
            xmlValidation="false" xmlNamespaceAware="false">

        <!-- SingleSignOn valve, share authentication between web applications
             Documentation at: /docs/config/valve.html -->
        <!--
        <Valve className="org.apache.catalina.authenticator.SingleSignOn" />
        -->

        <!-- Access log processes all example.
             Documentation at: /docs/config/valve.html -->
        <!--
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"  
               prefix="localhost_access_log." suffix=".txt" pattern="common" resolveHosts="false"/>
        -->
<!----><Context path="/ser" docBase="D:\project\myProject\editor\WebRoot"></Context>
<!--<Context path="/mvc" docBase="D:\project\myProject\area\WebRoot"></Context>-->
      </Host>

其实就是给工程配置虚拟路径,这样tomcat在启动的时候直接找到你的工程了,
你上传的图片就不会跑到/tomcat/webapps/目录,而是直接到了你的工程里,
不管你怎样重启项目,或者清理缓存,上传的文件依然存在!


但是如果要debug,怎么办,用<Context>设置docbase,debug的时候不能到代码 --------------------编程问答--------------------
引用 15 楼 hllfl 的回复:
[Quote=引用 8 楼 weihui5368452 的回复:]
一般服务器都不会关闭的,关了也可以啊,只要不要重新部署就没事了,否则是会删除原来所有文件!
是的+1024 --------------------编程问答--------------------
引用 17 楼 cgw1123 的回复:
[Quote=引用楼主 tokissing 的回复:]
是这样的。
我写了一个图片上传的方法,上传时,判断没有这个目录就自动建立一个。
然后开始些日图片,就是上传图片,能成功。
但是,重启项目,或者清理缓存之后,图片和文件夹就会自动被删除,不见了。
求解决办法!!!
或者有更好的上传方法也行。急。。。。。。。

不知道楼主重启项目或清理缓存是如何来操作的,如果之前上传都是没问题的,只是在重启项目或清理缓存之后出现这种现象,也有可能是你的操作有问题吧。
是不是楼主点击过菜单Project里面的Clean呢?如果是的话,问题就在此了。

17楼正解。
--------------------编程问答--------------------
引用 12 楼 XIAOXIAO_MUYU 的回复:
我也遇到个这个问题,用了好久才解决,你到网上下载文件的jar包就可以了。
什么文件的jar包? --------------------编程问答--------------------
引用 32 楼 s478853630 的回复:
Quote: 引用 30 楼 hepeng154833488 的回复:

可以把这个文件夹创建到你的项目里面吗?……


行不行,你试试便知道了,
部署web项目,别在eclipse中点来点去的部署,那样虽然快捷,但实际上是复制项目到tomcat,有很多弊端!
修改tomcat的配置文件正好解决这个问题,
你反过来想一想,javaweb项目的服务器一般都是linux系统,linux系统中不可能安装eclipse,
所以在linux系统中部署项目,就是修改配置文件,然后运行命令启动tomcat,

这样部署后,request.getSession().getServletContext().getRealPath("/");得到的是项目的WebRoot根目录,比如:D:\project\myProject\editor\WebRoot,上传文件时的文件夹自然就会创建在项目中,
如果你在eclipse中点来点去的部署,得到的却是tomcat的webapps根目录,文件夹就会创建在tomcat中,

我只能这样解释了,希望你能明白!
讲得真好,学习了 --------------------编程问答-------------------- 很正常好么,因为你上传到服务器的时候是编译过的。
你存到本地磁盘有什么用?request.getSession().getServletContext().getRealPath("/");这句没错的。

在本地测试的话别重新部署就行。 --------------------编程问答-------------------- 这个帖子不错啊。学习啦!
补充:Java ,  Web 开发
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,