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文件夹下查找文件。
————本文仅作参考
相关推荐
Tomcat 配置虚拟路径,上传图片到虚拟路径 Tomcat 配置虚拟路径是指在 Tomcat 中设置一个虚拟目录,使得项目的目录映射到 Tomcat 中,从而实现项目的部署和管理。上传图片到虚拟路径是指将图片上传到虚拟目录中,以...
在这里,`imagePathFormat`的`/ueditor`就是我们之前设置的虚拟路径,`{date}`和`{randomdir}`是UEditor自动生成的日期和随机目录,用于区分不同的上传文件,而`{filename}`则是上传文件的实际名称。 最后,如果你...
虚拟路径是指在Tomcat中定义的一个映射关系,它将一个URL路径映射到服务器磁盘上的实际文件或目录。这种方式可以让用户通过特定的URL访问位于服务器任意位置的文件,而不需要修改应用程序中的代码或配置。使用虚拟...
而`reloadable="true"`则表示当`docBase`路径下的文件发生变化时,Tomcat会自动重新加载Web应用,无需重启服务器。 在配置虚拟路径时,还可以设置其他属性,比如`workDir`属性可以指定Web应用的工作目录;`...
将改文件复制到jetty的路径下,可以启动jetty路径去测试
三、数据两级目录:storage服务器在每个虚拟磁盘路径下创建的两级目录,用于存储数据文件。 四、文件名:与文件上传时不同。是由存储服务器根据特定信息生成,文件名包含:源存储服务器IP地址、文件创建时间戳、...
虚拟路径的配置可以在application.properties文件中进行设置。下面是Springboot内置tomcat配置虚拟路径过程解析的详细介绍。 首先,需要了解Springboot中的默认静态资源路径。Springboot提供了多种默认的静态资源...
- 获取文件路径,使用Server.MapPath方法将虚拟路径转换为服务器上的实际路径。 - 使用System.IO命名空间中的File.ReadAllBytes方法读取文件到二进制数组中。 - 建立数据库连接,创建SQL命令对象,将二进制数组作为...
1.百度的ueditor上传控件,在上传图片时,默认只能存储在项目文件夹下,这样tomcat重新部署,有可能之前上传的文件就会丢失。 2.如果想把图片上传到项目目录之外的目录中,直接下载本controller.jsp,替换原...
本教程将详细讲解如何在Spring Boot应用中实现单个和多个文件的上传,并处理与系统兼容性和虚拟路径映射相关的问题。 首先,我们需要在Spring Boot项目中引入相关依赖。在`pom.xml`文件中添加`spring-boot-starter-...
完成上述操作后,当用户使用上传文件时,JavaScript获取到的文件路径将会是真实的文件路径而非虚拟路径。不过,需要指出的是,即使在IE浏览器中开启了此功能,其他浏览器如Chrome、Firefox等仍然遵循标准不提供真实...
这里,我们设置了正确的请求头以上传文件,并指定了Web Service的URL以及本地要上传的文件路径。 为了在服务器虚拟机上运行Web Service,我们需要IIS(Internet Information Services),它是Windows操作系统中的...
Spring Boot 2.0 图片上传至本地或服务器并配置虚拟路径的方法 本文介绍了如何使用 Spring Boot 2.0 实现图片上传至本地或服务器,并配置虚拟路径的方法。该方法可以满足图片上传和预览的需求,并且可以将图片路径...
jsp解决文件上传后重启Tomcat时文件自动删除问题 本文主要介绍了jsp解决文件上传后重启Tomcat时文件自动删除问题,包括问题分析和...通过配置虚拟路径,我们可以避免上传文件被删除的问题,从而确保上传的文件安全。
根据不同的保存选项(如物理路径、虚拟路径或自动保存),`saveAs()`方法提供了灵活的文件存储策略。 5. **获取文件信息**:使用`File`类的方法(如`getFileName()`、`getSize()`等)可以轻松获取文件的详细信息,...
* 将文件路径转换为虚拟路径 * 使用FileStream对象来读取文件流 * 使用Response对象来输出文件流 4. 上传限制信息实现 在源代码中,使用了System.Configuration命名空间中的类和方法来实现上传限制信息。主要包括...
这里,`Server.MapPath()`将虚拟路径转换为实际的物理路径,`Path.GetFileName()`获取文件名,`SaveAs()`则保存文件。 4. **错误处理和验证** 在处理文件上传时,你还需要考虑错误处理和验证。例如,验证文件类型...
- ASP提供了`Server.MapPath`方法将虚拟路径转换为物理路径,以便操作文件。 5. **文件保存**: - 使用`FileUpload.SaveAs`方法将临时文件保存到目标位置。 - 应该注意安全性和权限问题,确保只有经过验证的文件...
它涵盖了从接收文件、保存文件到发送文件给客户端的完整流程,并允许开发者自定义存储路径或使用虚拟路径。通过学习和理解这个项目,开发者可以更好地集成文件操作到自己的SpringMVC应用中,提升用户体验并确保安全...