更改已有web应用用户上传图片的存储地址
2013-02-26 16:55
525 查看
原来工程的上传图片存储地址在web应用的目录下,并且是硬编码到其中的:
![](http://images.cnitblog.com/blog/189953/201302/26095730-2c1f559b122544589b460b9b6eb311e4.jpg)
每次使用maven tomcat:redeploy以后,这个目录就没有了。
![](http://images.cnitblog.com/blog/189953/201302/26100314-91347a03f2a442b2aacf10eccb0e03aa.jpg)
现在想要把上传图片的位置移动到tomcat的webapps目录中专门存放图片的一个目录下。
![](http://images.cnitblog.com/blog/189953/201302/26100842-c1b2719c4f9c468e9c201df4b81c318b.jpg)
即,新建的一个images目录用来存放web应用的图片们。
这样就把工程和用户上传图片分离了,以后在redeploy时也不用预先备upload目录,然后再拷贝回去,因而在web应该更新时比较方便些。此外,还想改变文件路径被硬编码到java文件中的现状,所以将文件的存储位置预先定义在web.xml中,这样将来再改变位置的时候就不需要再回去改动代码了。
要完成上述目的,需要更新的地方有三个:
一、在web.xml中设置保存上传图片的路径
二、更新与上传图片相关的java类,去掉硬编码的部分,将路径改为从servletContext读取,由web.xml统一配置。
三、更新MySQL数据库中已经存在的数据中的链接路径
下面记录更新的过程:
一、在web.xml中设置保存上传图片的路径
二、更新与上传图片相关的java类
上传图片使用的是smartUpload。先通过servletContext获得UPLOAD_IMAGE_PATH参数的地址,保存在image_path这个String变量中。
2.1从servletContext中获得上传文件保存的地址
这个地址在使用之前别忘了在代码中测试一下是否存在该目录,若不存在要创建,否则会抛出exception。
2.2使用指定的路径保存上传的图片
第8行中的image_path就是在web.xml文件中指定的UPLOAD_IMAGE_PATH参数的值。
2.3测试
![](http://images.cnitblog.com/blog/189953/201302/26111749-f0056072e54545cf9906baf2e71f3f71.jpg)
UPLOAD_IMAGE_PATH参数指定的目录下:
![](http://images.cnitblog.com/blog/189953/201302/26111845-beb7425a2d5d43d68f7fa04583b61bf6.jpg)
三、更新MySQL数据库中已经存在的测试数据中的链接路径
数据库中存有曾经的测试数据,其中的图片路径还是"upload/xxxxxx.jpg"格式的。现在要把它们替换成我们在web.xml中定义的新路径"../images/wiqun/upload/xxxxx.jpg"格式。此过程可以使用MySQL的replace语句来完成。现在,我们要把sight表格中的introduction列中的“upload/”替换成“../images/wiqun/upload/”,语句为:
格式为 update 表名 set 列名 = replace(列名,'被替换的字串','替换的字串')
执行前,数据库introduction列部分截图如下:
![](http://images.cnitblog.com/blog/189953/201302/26162817-5d5704650c0841128ba429b662783d82.jpg)
wiqun是web应用的名称。当前所有用户上传的图片都是存放在wiqun目录的upload目录下,就像文章一开始所显示的截图。
在执行了上述replace语句后,MySQL提示如下:
![](http://images.cnitblog.com/blog/189953/201302/26163009-c6c7144752544c9faaa20b781b86e0d8.jpg)
现在再看看数据库里的状态:
![](http://images.cnitblog.com/blog/189953/201302/26163050-340a91c815ad4fac8a5849f2c0c3d1ee.jpg)
可以看到路径名都已经完成替换了。
在浏览器中测试图片是否可以浏览:
![](http://images.cnitblog.com/blog/189953/201302/26164133-e779c48793a4471fa6030d7cb386e06c.jpg)
至此,就完成了web应用中,上传文件的路径替换。
以后如果还要更改路径,只需要更改web.xml中UPLOAD_IMAGE_PATH参数的值,并且更新数据库中的链接即可,不需要再改动代码了。硬编码真是有些伤不起。不知道数据库中是不是也可以预先定义一个变量什么的,然后也直接绑定到配置文件中,这样以后也不需要手工更新数据库了。
![](http://images.cnitblog.com/blog/189953/201302/26095730-2c1f559b122544589b460b9b6eb311e4.jpg)
每次使用maven tomcat:redeploy以后,这个目录就没有了。
![](http://images.cnitblog.com/blog/189953/201302/26100314-91347a03f2a442b2aacf10eccb0e03aa.jpg)
现在想要把上传图片的位置移动到tomcat的webapps目录中专门存放图片的一个目录下。
![](http://images.cnitblog.com/blog/189953/201302/26100842-c1b2719c4f9c468e9c201df4b81c318b.jpg)
即,新建的一个images目录用来存放web应用的图片们。
这样就把工程和用户上传图片分离了,以后在redeploy时也不用预先备upload目录,然后再拷贝回去,因而在web应该更新时比较方便些。此外,还想改变文件路径被硬编码到java文件中的现状,所以将文件的存储位置预先定义在web.xml中,这样将来再改变位置的时候就不需要再回去改动代码了。
要完成上述目的,需要更新的地方有三个:
一、在web.xml中设置保存上传图片的路径
二、更新与上传图片相关的java类,去掉硬编码的部分,将路径改为从servletContext读取,由web.xml统一配置。
三、更新MySQL数据库中已经存在的数据中的链接路径
下面记录更新的过程:
一、在web.xml中设置保存上传图片的路径
<context-param> <param-name>UPLOAD_IMAGE_PATH</param-name> <param-value>../images/wiqun/upload/</param-value> </context-param>
二、更新与上传图片相关的java类
上传图片使用的是smartUpload。先通过servletContext获得UPLOAD_IMAGE_PATH参数的地址,保存在image_path这个String变量中。
2.1从servletContext中获得上传文件保存的地址
String image_path = this.getServletContext().getInitParameter("UPLOAD_IMAGE_PATH");//从配置文件中读取要保存的位置
这个地址在使用之前别忘了在代码中测试一下是否存在该目录,若不存在要创建,否则会抛出exception。
2.2使用指定的路径保存上传的图片
su.upload(); for (int i = 0; i < su.getFiles().getCount(); i++) { com.wiqun.smartUpload.File myfile = su.getFiles().getFile(i); //直接提取或另外生成图片的文件名,保存在fileName变量中 ........ //将上传的图片以fileName为名,保存到image_path指定的目录下 myfile.saveAs(image_path + fileName); }
第8行中的image_path就是在web.xml文件中指定的UPLOAD_IMAGE_PATH参数的值。
2.3测试
![](http://images.cnitblog.com/blog/189953/201302/26111749-f0056072e54545cf9906baf2e71f3f71.jpg)
UPLOAD_IMAGE_PATH参数指定的目录下:
![](http://images.cnitblog.com/blog/189953/201302/26111845-beb7425a2d5d43d68f7fa04583b61bf6.jpg)
三、更新MySQL数据库中已经存在的测试数据中的链接路径
数据库中存有曾经的测试数据,其中的图片路径还是"upload/xxxxxx.jpg"格式的。现在要把它们替换成我们在web.xml中定义的新路径"../images/wiqun/upload/xxxxx.jpg"格式。此过程可以使用MySQL的replace语句来完成。现在,我们要把sight表格中的introduction列中的“upload/”替换成“../images/wiqun/upload/”,语句为:
update sight set introduction = replace(introduction,'upload/','../images/wiqun/upload/');
格式为 update 表名 set 列名 = replace(列名,'被替换的字串','替换的字串')
执行前,数据库introduction列部分截图如下:
![](http://images.cnitblog.com/blog/189953/201302/26162817-5d5704650c0841128ba429b662783d82.jpg)
wiqun是web应用的名称。当前所有用户上传的图片都是存放在wiqun目录的upload目录下,就像文章一开始所显示的截图。
在执行了上述replace语句后,MySQL提示如下:
![](http://images.cnitblog.com/blog/189953/201302/26163009-c6c7144752544c9faaa20b781b86e0d8.jpg)
现在再看看数据库里的状态:
![](http://images.cnitblog.com/blog/189953/201302/26163050-340a91c815ad4fac8a5849f2c0c3d1ee.jpg)
可以看到路径名都已经完成替换了。
在浏览器中测试图片是否可以浏览:
![](http://images.cnitblog.com/blog/189953/201302/26164133-e779c48793a4471fa6030d7cb386e06c.jpg)
至此,就完成了web应用中,上传文件的路径替换。
以后如果还要更改路径,只需要更改web.xml中UPLOAD_IMAGE_PATH参数的值,并且更新数据库中的链接即可,不需要再改动代码了。硬编码真是有些伤不起。不知道数据库中是不是也可以预先定义一个变量什么的,然后也直接绑定到配置文件中,这样以后也不需要手工更新数据库了。
相关文章推荐
- 图片分享公司Flickr更新了其IOS应用,用户可以对自己上传的图片添加标签,描述和搜索关键字
- 安卓完成一个应用,用户可以根据自己输入的地址下载网络上的图片和网页信息
- [分享黑科技]纯js突破localstorage存储上线,远程抓取图片,并转码base64保存本地,最终实现整个网站所有静态资源离线到用户手机效果却不依赖浏览器的缓存机制,单页应用最新黑科技
- 完成一个应用,用户可以根据自己输入的地址下载网络上的图片和网页信息
- webuploader+python3(BaseHTTPRequestHandler)实现图片文件的上传与接收存储
- [原]as3 flash web 应用 (8)图片批量上传之 向服务器发送和获取额外数据
- django 如何将用户上传的图片展示在后台(列表页),缩略图而不是地址
- 使用jQuery开发一个基于HTML5的漂亮图片拖拽上传web应用
- [原]as3 flash web 应用 (3)批量上传之 图片缩略图的呈现
- 基于spring-boot的web应用,ckeditor上传文件图片文件
- 使用jQuery开发一个基于HTML5的漂亮图片拖拽上传web应用
- 使用jQuery开发一个基于HTML5的漂亮图片拖拽上传web应用
- 图片共享应用Mobli已有两百万用户
- LINUX目录和文件各自的权限说明,以及目录和文件权限之间的关系(应用:配置linux下上传图片的存储目录)
- 图片上传,CheckBox等用户控件的应用代码
- 【html5】Web存储_locaStorage对象的应用
- web项目利用apache的DiskFileItemFactory和ServletFileUpload上传图片
- 如何将含有大量图片或公式的word文档上传到web服务器
- 妈蛋:kinMaxShow轮播图异常,WebUploader图片上传坑爹,图片被压缩了
- web存储、应用缓存、web workers