http://guard.iteye.com/blog/2067316
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'}");
以上为主要代码。
分享到:
相关推荐
将改文件复制到jetty的路径下,可以启动jetty路径去测试
一些项目中往往需要上传一些图片文件之类,一般不建议直接保存在数据库内,往往是讲图片等资源保存在服务器的某个文件夹下,传统做法是上传到部署目录下,通过相对路径进行访问。这样当我们系统需要进行升级,进行...
tomcat配置虚拟路径保存访问图片, 一些项目中往往需要上传一些图片文件之类,一般不建议直接保存在数据库内,往往是讲图片等资源保存在服务器的某个文件夹下
三、数据两级目录:storage服务器在每个虚拟磁盘路径下创建的两级目录,用于存储数据文件。 四、文件名:与文件上传时不同。是由存储服务器根据特定信息生成,文件名包含:源存储服务器IP地址、文件创建时间戳、...
1.百度的ueditor上传控件,在上传图片时,默认只能存储在项目文件夹下,这样tomcat重新部署,有可能之前上传的文件就会丢失。 2.如果想把图片上传到项目目录之外的目录中,直接下载本controller.jsp,替换原...
最近写了关于图片上传至本地文件夹或服务器,上传路径到数据库,并在上传时预览图片。本文通过实例代码给大家分享spring boot2.0图片上传至本地或服务器并配置虚拟路径的方法,需要的朋友参考下
由于当时写这个图片上传服务器的功能只是为了练练手,简单的实现后便没有再去管,后来经过道友提醒,图片上传路径不能放置在eclipse的工程目录下,否则后期部署会有很大的不方便,而且每次图片上传结束后,都要刷新...
就不允许在 App 间,使用 file:// 的方式,传递一个 File ,否则就会抛出异常,而provider的作用恰好就是用过 content://的模式替换掉 file://,看上去只是换了个前缀,但其实是有真实路径转为了虚拟路径。...
使用springboot实现文件的单个和多个上传,并解决系统兼容性及虚拟路径映射等多个问题
写在前面 现在部署Asp.Net Core应用已经不再限制于Windows的IIS上,更多的是Docker容器、各种反向代理来...在Asp.Net MVC中从虚拟路径中存取文件也很简单,如Server.MapPath(“~/Upload/liohuang.jpg”); 但在Asp.N
使用springboot实现多文件上传与删除...windows使用不需要虚拟路径,直接使用真实路径即可,linux采用虚拟路径,部署公网后,上传的文件可通过公网访问。集成项目很简单,只需要添加maven和将controller类复制过去即用
用Struts1.2实现文件上传功能,并且把文件保存在javaweb project的虚拟路径下。利用fileForm 类型上传二进制文件格式和字符串格式数据。
文件在线管理系统-艾恩ASP无组件上传-SWFUpload上传 1、Ajax无刷新管理 2、映射虚拟目录,安全管理文件 3、扩展Session机制 4、Flash多文件带进度条上传,显示上传速度、用时 5、艾恩ASP无组件上传类 6、下载...
此上传下载 的 demo 可以自定义路径上传下载,和虚拟路径上传下载,此项目代码中有详细的注释,欢迎大家使用,也欢迎大家提出宝贵的意见和建议
WLONG3D全功能无组件文件上传系统wlup3.4使用说明: 新版本的功能更新: 1、对操作版面作出全面调整,使功能更贴尽...3、系统中用户文件夹和后台上传文件管理是使用虚拟路径的,所以请用户上传到网上再进行测试。
注意必须是真实路径,可以用Server.MapPath来转换虚拟路径。 oFileUp.Form(strFormElement).Save 不能指定文件名喽。 注意:Path属性必须在提到任何表单项之前,建议放在 Set oFileUp = Server.CreateObject(...
现在fckeditor已经改名为ckeditor,上传控件也分离为ckfinder,按照说明文档的默认配置会出现上传路径不正确的情况,因为我们的网站可以通过定义默认网站、虚拟目录、以及放在网站的子目录下进行访问
远古采集系统 介绍 安装说明 先解压文件 ...另外注意:程序根目录dbcon.asp文件里数据库路径为物理路径而不是虚拟路径,如果你不知道你空间在服务器的实际路径,请运行目录下1.ASP就知道你空间的物理路径了)
增加功能: 1.单文件上传后的文件可删除 2.如果单文件上传模式上传的是图片,则有缩略图 更正:列表上传模式,如果... 虚拟目录运行,需要更改js文件的引入路径,还有 相关资源的路径,这个问题将在下一个版本解决