`
start_p
  • 浏览: 66126 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论
阅读更多

java web项目有一个上传图片功能,使用的是xheditor插件中的图片上传功能。遇到一个问题:文件上传到服务器上是没问题的,但是重启服务器或者重新部署以后以前上传的图片都会丢失,原因是文件上传到服务器以后需要写到一个真实的磁盘路径下,所以需要有绝对路径,用这种方式获取:

String uploadPath = request.getSession().getServletContext().getRealPath("/uploadImg") ;
这样获取到的是tomcat的安装目录C:\Program Files (x86)\apache-tomcat-6.0.30\wtpwebapps\myProject\uploadImg。每次重启或部署就会覆盖掉tomcat下面的应用程序,肯定是不行的。
        解决办法就是将图片上传到虚拟路径下:
        在tomcat的server.xml文件中host之间添加 <Host> <Context docBase="D:/images" path="/img" /></Host> 然后就可以这样访问了localhost:8080/img/xxx
为了方便应用的迁移,在java代码中最好不要使用绝对路径,所以就用到了配置文件,在src目录下新建一个imgPath.properties文件配置两个键值:
imgPath=/img
imgRealPath=D:\\images
相关配置介绍完就直接上代码:
long fileName=System.currentTimeMillis();
                //TODO 改为properties配置文件的方式获取绝对路径
                ResourceBundle rb = ResourceBundle.getBundle("imgPath", Locale.getDefault());
                String imgPath=rb.getString("imgPath");//相对路径
                String imgRealPath=rb.getString("imgRealPath");//硬盘存放路径
                System.out.println("realPath:"+imgPath+"  realPath:"+imgRealPath);
                File file = new File(imgRealPath);
                if(!file.exists()){
                    file.mkdirs();
                }
                InputStream is=new FileInputStream(filedata);
                File outFile = new File(imgRealPath+"/"+fileName+".jpg");// 输出文件 
                OutputStream os = new FileOutputStream(outFile);
                byte[] buffer = new byte[1024];  
                int len = 0; 
                while ((len=is.read(buffer))!=-1) {
                    os.write(buffer,0,len);
                }
                is.close();
                os.close();
                response.setCharacterEncoding("utf-8");
                out=response.getWriter();
                //TODO 应返回远程机地址
                out.println("{'err':'','msg':'"+imgPath+"/"+fileName+".jpg'}");
以上为主要代码。
 
大多数时候需要部署到linux服务器下,此时略有区别。代码无需修改,要修改的是一些配置文件。我的测试使用环境是linux+jboss5。
    首先是配置jboss的虚拟路径\jboss-5.1.0.GA\server\default\conf\bootstrap\profile.xml文件中修改,
<property name="applicationURIs">
    <list elementClass="java.net.URI">
        <value>${jboss.server.home.url}deploy</value>
        <!--下面一段是新加的虚拟路径-->
        <value>file:///opt/jboss/server</value>
    </list>
</property>
 
在/opt/jboss/server下新建一个img.war的文件夹,其中img也会作为url的一部分
 
imgPath.properties文件:
imgPath=/img
imgRealPath=/opt/jboss/server/img.war
在浏览器中访问locahost:8080/img/xx.jpg就会在/opt/jboss/server/img.war文件夹下查找文件。
 
————本文仅作参考
1
0
分享到:
评论

相关推荐

    tomcat配置虚拟路径,上传图片到虚拟路径

    Tomcat 配置虚拟路径,上传图片到虚拟路径 Tomcat 配置虚拟路径是指在 Tomcat 中设置一个虚拟目录,使得项目的目录映射到 Tomcat 中,从而实现项目的部署和管理。上传图片到虚拟路径是指将图片上传到虚拟目录中,以...

    Tomcat配置虚拟路径

    虚拟路径是指在Tomcat中定义的一个映射关系,它将一个URL路径映射到服务器磁盘上的实际文件或目录。这种方式可以让用户通过特定的URL访问位于服务器任意位置的文件,而不需要修改应用程序中的代码或配置。使用虚拟...

    百度UEditor 支持tomcat虚拟路径映射

    在这里,`imagePathFormat`的`/ueditor`就是我们之前设置的虚拟路径,`{date}`和`{randomdir}`是UEditor自动生成的日期和随机目录,用于区分不同的上传文件,而`{filename}`则是上传文件的实际名称。 最后,如果你...

    tomcat配置虚拟路径保存访问图片

    而`reloadable="true"`则表示当`docBase`路径下的文件发生变化时,Tomcat会自动重新加载Web应用,无需重启服务器。 在配置虚拟路径时,还可以设置其他属性,比如`workDir`属性可以指定Web应用的工作目录;`...

    jetty虚拟路径设置

    将改文件复制到jetty的路径下,可以启动jetty路径去测试

    基于SpringBoot结合分布式文件系统FastDFS实现的文件上传实例demo,可拿来直接嵌入到自己的系统中

    三、数据两级目录:storage服务器在每个虚拟磁盘路径下创建的两级目录,用于存储数据文件。 四、文件名:与文件上传时不同。是由存储服务器根据特定信息生成,文件名包含:源存储服务器IP地址、文件创建时间戳、...

    Springboot内置tomcat配置虚拟路径过程解析

    虚拟路径的配置可以在application.properties文件中进行设置。下面是Springboot内置tomcat配置虚拟路径过程解析的详细介绍。 首先,需要了解Springboot中的默认静态资源路径。Springboot提供了多种默认的静态资源...

    将文件上传、下载(以二进制流保存到数据库)实现代码

    - 获取文件路径,使用Server.MapPath方法将虚拟路径转换为服务器上的实际路径。 - 使用System.IO命名空间中的File.ReadAllBytes方法读取文件到二进制数组中。 - 建立数据库连接,创建SQL命令对象,将二进制数组作为...

    百度Ueditor编辑控件,修改图片存储路径为虚拟目录的后台文件controller.jsp(无需编译,替换简单设置即可)

    1.百度的ueditor上传控件,在上传图片时,默认只能存储在项目文件夹下,这样tomcat重新部署,有可能之前上传的文件就会丢失。 2.如果想把图片上传到项目目录之外的目录中,直接下载本controller.jsp,替换原...

    springboot文件上传(支持单个和多个)

    本教程将详细讲解如何在Spring Boot应用中实现单个和多个文件的上传,并处理与系统兼容性和虚拟路径映射相关的问题。 首先,我们需要在Spring Boot项目中引入相关依赖。在`pom.xml`文件中添加`spring-boot-starter-...

    js获取上传文件的绝对路径实现方法

    完成上述操作后,当用户使用上传文件时,JavaScript获取到的文件路径将会是真实的文件路径而非虚拟路径。不过,需要指出的是,即使在IE浏览器中开启了此功能,其他浏览器如Chrome、Firefox等仍然遵循标准不提供真实...

    C# 通过WebService上传视频文件到服务器虚拟机下源码

    这里,我们设置了正确的请求头以上传文件,并指定了Web Service的URL以及本地要上传的文件路径。 为了在服务器虚拟机上运行Web Service,我们需要IIS(Internet Information Services),它是Windows操作系统中的...

    spring boot2.0图片上传至本地或服务器并配置虚拟路径的方法

    Spring Boot 2.0 图片上传至本地或服务器并配置虚拟路径的方法 本文介绍了如何使用 Spring Boot 2.0 实现图片上传至本地或服务器,并配置虚拟路径的方法。该方法可以满足图片上传和预览的需求,并且可以将图片路径...

    jsp-解决文件上传后重启Tomcat时文件自动删除问题.docx

    jsp解决文件上传后重启Tomcat时文件自动删除问题 本文主要介绍了jsp解决文件上传后重启Tomcat时文件自动删除问题,包括问题分析和...通过配置虚拟路径,我们可以避免上传文件被删除的问题,从而确保上传的文件安全。

    .net core WebApi 文件上传服务文件下载

    - **文件路径安全**:避免使用用户提供的路径,防止路径遍历攻击。 - **文件名处理**:对上传的文件名进行清理,防止恶意文件名导致的安全问题。 - **限制文件类型**:仅允许特定类型的文件上传,以防止上传执行...

    web中如何上传文件概述

    根据不同的保存选项(如物理路径、虚拟路径或自动保存),`saveAs()`方法提供了灵活的文件存储策略。 5. **获取文件信息**:使用`File`类的方法(如`getFileName()`、`getSize()`等)可以轻松获取文件的详细信息,...

    C#实现文件上传下载源代码

    * 将文件路径转换为虚拟路径 * 使用FileStream对象来读取文件流 * 使用Response对象来输出文件流 4. 上传限制信息实现 在源代码中,使用了System.Configuration命名空间中的类和方法来实现上传限制信息。主要包括...

    ASP.NET MVC 上传文件

    这里,`Server.MapPath()`将虚拟路径转换为实际的物理路径,`Path.GetFileName()`获取文件名,`SaveAs()`则保存文件。 4. **错误处理和验证** 在处理文件上传时,你还需要考虑错误处理和验证。例如,验证文件类型...

    asp 纯脚本上传文件

    - ASP提供了`Server.MapPath`方法将虚拟路径转换为物理路径,以便操作文件。 5. **文件保存**: - 使用`FileUpload.SaveAs`方法将临时文件保存到目标位置。 - 应该注意安全性和权限问题,确保只有经过验证的文件...

Global site tag (gtag.js) - Google Analytics