原来工程的上传图片存储地址在web应用的目录下,并且是硬编码到其中的:

每次使用maven tomcat:redeploy以后,这个目录就没有了。

现在想要把上传图片的位置移动到tomcat的webapps目录中专门存放图片的一个目录下。

即,新建的一个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使用指定的路径保存上传的图片

 1 su.upload();
2
3 for (int i = 0; i < su.getFiles().getCount(); i++) {
4   com.wiqun.smartUpload.File myfile = su.getFiles().getFile(i);
5     //直接提取或另外生成图片的文件名,保存在fileName变量中
6   ........ 7     //将上传的图片以fileName为名,保存到image_path指定的目录下
8 myfile.saveAs(image_path + fileName); 9   
10 }

第8行中的image_path就是在web.xml文件中指定的UPLOAD_IMAGE_PATH参数的值。

2.3测试

UPLOAD_IMAGE_PATH参数指定的目录下:

三、更新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列部分截图如下:

wiqun是web应用的名称。当前所有用户上传的图片都是存放在wiqun目录的upload目录下,就像文章一开始所显示的截图。

在执行了上述replace语句后,MySQL提示如下:

现在再看看数据库里的状态:

可以看到路径名都已经完成替换了。
在浏览器中测试图片是否可以浏览:

至此,就完成了web应用中,上传文件的路径替换。

以后如果还要更改路径,只需要更改web.xml中UPLOAD_IMAGE_PATH参数的值,并且更新数据库中的链接即可,不需要再改动代码了。硬编码真是有些伤不起。不知道数据库中是不是也可以预先定义一个变量什么的,然后也直接绑定到配置文件中,这样以后也不需要手工更新数据库了。

至于别的大神说用云存储的方式进行存储,小编在此还不会,哪位大神要会的话进行个留言,万分感谢!

java web应用用户上传图片的存储地址的更多相关文章

  1. java web课程设计截图和服务器地址

    企业办公测试截图和服务器地址 本篇博客主要围绕以下几个部分展开,登录.系统管理.工作流.个人事务管理.内部邮件.公共信息共六个部分.主要有界面截图和简要介绍. 一.登录.更改密码界面 登录界面包括以管 ...

  2. Java Web实现用户登录界面

    一.学习Java Web需要的技术: Java语言基础:算法基础.常用数据结构.编程规范. 掌握常见的数据结构和实用算法:培养良好的编程习惯. Java面向对象:封装.继承.多态等,面向对象程序设计, ...

  3. Java Web实现用户登录功能

    java web 学习记录一下 mvc结构实现mysql 连接 什么是mvc MVC是模型(model).视图(view).控制(controller)这三个单词上的首字母组成.它是一种应用模型,它的 ...

  4. Java Web(九) 用户管理系统

    前面学习了一大堆,什么JSP,Servlet.jstl.el等等等,大多是一些死的东西,只要会其语法,知道怎么用就行了,所以做了一个小小的只有增删改查的小demo,为的就是熟悉这些知识.灵活运用起来. ...

  5. Java使用阿里云OSS对象存储上传图片

    原 Java使用阿里云OSS对象存储上传图片 2017年03月27日 10:47:28 陌上桑花开花 阅读数 26804更多 分类专栏: 工作案例总结 版权声明:本文为博主原创文章,遵循CC 4.0 ...

  6. Java Web开发 - 持久型/存储型XSS漏洞

    Java Web开发 - 持久型/存储型XSS漏洞 1.什么是XSS漏洞攻击? XSS是跨站脚本攻击(Cross Site Scripting)的简称,之所以叫XSS而不是CSS相比大家都能明白了吧, ...

  7. Java Web 开发利用Struts2+Spring+mybatis写一个用户登录界面以及简单的数据交互

    框架的东西太复杂也难以讲通,直接上代码: 一.首先得配置环境 和导入必要的jar包 有一些重要的如下: Filter文件夹下的SafetyFilter.java   model文件夹下的 Global ...

  8. java web用户登录界面

    做这次实验,主要用到了mysql  java web 的 内容 实验代码: IUserDao.java package com.jaovo.msg.dao; import java.util.List ...

  9. 如何在java web工程下建立存储property文件的文件夹,让Java程序直接读取

    如何在java web工程下建立存储property文件的文件夹,让Java程序直接读取: 步骤如下:

随机推荐

  1. android studio安装中出现Failed to install Intel HAXM错误的解决方法

    1.问题分析 从下面可以知道安装Intel HAXM失败,请检查haxm_silent_run.log这篇日志. (1)先了解一下什么是Intel HAXM Intel代表的是英特尔,HAXM的全程是 ...

  2. C# 连接Excel,获取表格数据,获取多个sheet中的数据,获取多个sheet名

    /// <summary> /// 获取Excel内容. /// </summary> /// <param name="sheetName"> ...

  3. python使用SMTP发邮件时使用Cc(抄送)和Bcc(密送)

    SMTP发送邮件的时候,并没有特殊的通信语句告诉邮件服务器 谁是主送,谁是抄送/密送,这三个角色都是以同样的方式告诉邮件服务器的,然后重点在邮件内容里. 邮件内容分为头和体两部分(就像http),头部 ...

  4. Spring集成RMI实现远程调用

    前提: 1.开发工具: jdk tomcat ecplise,开发工具的使用本篇不做介绍. 2.需具备以下知识:javase servelt web rmi spring maven 一.关于RMI ...

  5. 【扯淡篇】CTSC/APIO/SDOI R2时在干什么?有没有空?可以来做分母吗?

    注意: 我比较弱, 并没有办法把外链bgm搞成https, 所以大家可以选择"加载不安全的脚本"或者把https改成http以获得更好的阅读体验! 据说, 退役了要写写回忆录. 但 ...

  6. java是否是“美丽的”语言

    java 学习  (jdk扫描   配置读取   服务器选项  )

  7. volatile(防止编译器对代码进行优化)

    adj.易变的:无定性的:无常性的:可能急剧波动的 网络挥发性:挥发性的:不稳定的 volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了.

  8. Hibernate与Mybatis的简单区别

    数据库连接创建.释放频繁造成系统的资源浪费从而影响系统性能,可以使用数据库连接池解决此问题,之前的java应用程序sql语句也是写在java代码中造成系统可维护性差,实际应用的sql变化较大,sql变 ...

  9. MySQL中可能遇到的问题及解决方法

    一.在创建存储函数时,出现错误: ERROR 1418 (HY000): This function has none of DETERMINISTIC, NO SQL, or READS SQLDA ...

  10. 后端异步接口url

    /wp-common/products.php?term_id=4&page=1 var currentAjax; var total = 0; function getAjaxData(te ...