一、数据库存储

  直接把图片的二进制码存到数据库,可参考blog:http://blog.csdn.net/hope2jiang/article/details/590733

  直接存图片在mysql上面有两点好处:

    1.比较容易做取重,就是相同的图片只存一份.

    2.最重要备份使用数据库的备份方式简单.

    3.容易管理,去掉无用的图片等.

  缺点:

    1.不适合超大量存储,数据的存储越大,恢复越麻烦

    2.当然一般还是需要前端做更多的物理缓存,而不是靠mysql来直接输出.

  还是看需求,如果图片是小图片,像论坛使用的,并且需要注重他的优点的可以使用,至于量没有具体的,你要想想如果数据库遇到问题,

  它的重做和迁移是否方便的问题.其实如果不是特殊情况一般存在数据库里都不是好的选择.平衡他的优缺点.

二、webRoot下存储

  利用上床组件把图片上传到web项目下,再存储图片的相对路径到数据库表中,需生成一个新的不会重复的图片名

  缺点:显而易见重新部署项目前需要重新把已上传的图片备份,待部署成功后拷贝到web项目下

三、web项目外存储

  顾名思义,把图片上传到web目录外

  1.建立存放图片的目录和web项目下一目录之间的联系

    例如:①Linux系统下,首先把图片上传到项目外一目录;

    ②然后把此目录挂载到项目内某一目录下mount --bind 实际存放图片目录项目内某一目录;

    ③然后把上传图片的相对路径存储到数据库表中;

    ④最后在项目中直接访问这个URL获取图片。

  注意:第一存放图片的目录需有上传权限;

    第二在重新部署时,undeploy前先解除挂载umount 实际存放图片目录项目内某一目录;

    待项目上传成功后再重新建立挂载,否则在undeploy时可能丢失已上传的图片。

  缺点:每次部署前后要进行挂载,解挂载操作,易误操作丢失资源

  2.配置虚拟路径

  例如使用tomcat时:

    首先把图片上传到项目外一目录下;然后在tomcat中配置一个虚拟路径指向上传目录命名为  "/fileUpload"  (在/conf/server.xml下配置Context即可);

    然后把上传图片的相对路径存储到数据库表中,再在程序中通过访问这个虚拟路径 "/fileUpload" + 数据库中存储的相对URL 来获取文件资源;

    (其实相当于在tomcat下重新启动了一个web项目,然后通过访问此web项目下的图片资源,

    这样其实也可以通过 http://ip:port/webProject/ resourse)。

  解决:可以使用tomcat的配置文件将某个请求映射到物理路径下 ,完成图片的回显。

  例子:

  1.修改tomcat的配置文件(window环境)

    首先找到tomcat目录下conf目录下的server.xml文件,在server.xml文件中找到<Host></Host>;

    然后在其中加上这<Context path="/uploadfile" docBase="D:\File\imager"></Context>

  如:

<Host name="localhost"  appBase="webapps" unpackWARs="true" autoDeploy="true">
  <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log."
    suffix=".txt" pattern="%h %l %u %t &quot;%r&quot; %s %b" />
  <!-- 下面两条主要是tomcat转发图片请求到相应的电脑物理磁盘位置 -->
  <Context path="/uploadfile" docBase="D:\File\imager"></Context>
</Host>

  tomcat在的请求一般为:http://localhost:8080/uploadfile/abc.jpg。配置完重启之后,该请求自动跳转到物理路径D:\File\imager下查找。会访问本机的D:\File\imager\abc.jpg。

  注意:在启动完tomcat后会报路径“D:\File\imager”找不到的bug,这是因为:tomcat不会自动帮您创建相关的文件路径,

需要我们自己先创建好相应的文件路径。

转载:https://www.cnblogs.com/lojun/p/7859923.html

【转】关于web项目中的图片上传、并在前端显示问题(tomcat中配置文件上传虚拟路径)的更多相关文章

  1. 关于web项目中的图片上传、并在前端显示问题(tomcat中配置文件上传虚拟路径)

    一.数据库存储 直接把图片的二进制码存到数据库,可参考blog:http://blog.csdn.net/hope2jiang/article/details/590733 直接存图片在mysql上面 ...

  2. Java连接MySQL数据库。编写一个应用程序,在主类Test_4类中,通过JDBC访问stu数据库,显示t_student表中的内容(表结构见表1),显示效果自己设计。

    题目2:编写一个应用程序,在主类Test_4类中,通过JDBC访问stu数据库,显示t_student表中的内容(表结构见表1),显示效果自己设计.之后,可根据显示的内容进行某条记录的删除(以id为条 ...

  3. eclipse中web项目部署以后jsp的java文件找不到问题(Tomcat配置serverlocations)

    我的开发环境:eclipse kepler (4.3)+tomcat7.0.42. 在我想看eclipse中web项目jsp文件被tomcat转换成java以后的java源文件的位置,发现正常情况下的 ...

  4. 利用WebUploader进行图片批量上传,在页面显示后选择多张图片压缩至指定路径【java】

    WebUploader是由Baidu WebFE(FEX)团队开发的一个简单的以HTML5为主,FLASH为辅的现代文件上传组件.在现代的浏览器里面能充分发挥HTML5的优势,同时又不摒弃主流IE浏览 ...

  5. 【extjs】 Extjs中的Ext.grid.Panel隐藏列会显示在表头中解决方法

    在Extjs中的GridPanel会有这样的情况,隐藏列会显示在menuDisabled中,但是这个一般没有什么用处,只是用于后台取值的作用,感兴趣的朋友可以了解下啊,希望本文对你有所帮助   在Ex ...

  6. web项目编译出错时,原因之一,可能是build path 中order and Export引起

    build path中的order and Export,如果两个libarary中有相同功能的jar包,则编译器会选择顺序在前的jar包中相应的类作为编译所需. 所以,当项目jar包较多的时候,如果 ...

  7. Linux 部署java web 项目,验证码图片不显示文字问题

    系统上线后,在获取验证码接口时,获取的验证码图片上没有对应的验证码数字,经过验证后,是由于Linux缺少字体造成的. 正常我们也可以将window的字体直接上传到linux服务器上,window的字体 ...

  8. AndroidStudio2.2 Preview3中NDK开发之CMake和传统 JNI在目录结构和配置文件上的区别(转载)

    自从AndroidStudio更新到2.2,就有了CMake和传统JNI两种开发NDK的方法,主要就是在目录结构和build.gradle上的区别,下面我们将分别介绍目录区别和build.gradle ...

  9. 数据库中float类型字段,转化到前端显示,统一保留两位小数

    客户的一个需求,mybatis查询到的数据库的数据进行转换,采用TypeHandler<T>的方式.float保留两位精度可以采用DecimalFormat 直接贴上最终的解决代码(事情没 ...

随机推荐

  1. ES6面向对象 动态添加标签页

    HTML <!DOCTYPE html> <html lang="en" xmlns="http://www.w3.org/1999/xhtml&quo ...

  2. ASP.NET底层原理

    上图基本上演示了IIS 6整个处理过程.在User Mode下,http.sys接收到一个基于aspx的http request,然后它会根据IIS中的Metabase查看该基于该Request的Ap ...

  3. 完全卸载Android Studio(卸载得干干净净)

    步骤其实很简单,一共三步,但是每一步都需要完成,步骤如下: 打开控制面板或腾讯软件管家等执行常规的卸载操作. 找到SDK的安装目录手动删除SDK. 进入“C:\Users\<你的用户名下> ...

  4. 从零开始搭建solo个人博客系统

    目录 1.博客系统的搭建流程 2.服务器选购 2.1阿里云学生主机 2.2普通云主机 3.域名购买与备案(可选) 3.1域名购买 3.2域名服务器备案 3.3域名服务器解析 4.solo安装 4.1 ...

  5. 五种团队的组织方式落地 DevOps

    原文链接:https://blog.matthewskelton.net/2013/10/22/what-team-structure-is-right-for-devops-to-flourish/ ...

  6. 梁敬彬老师的《收获,不止SQL优化》,关于如何缩短SQL调优时间,给出了三个步骤,

    梁敬彬老师的<收获,不止SQL优化>,关于如何缩短SQL调优时间,给出了三个步骤, 1. 先获取有助调优的数据库整体信息 2. 快速获取SQL运行台前信息 3. 快速获取SQL关联幕后信息 ...

  7. java对 zip文件的压缩和解压(ant解决中文乱码)

    说明: 1.对于压缩的文件,当文件名称是中文时,若使用JDK API中自带的类(java.util.zip.ZipEntry; java.util.zip.ZipOutputStream;)进行压缩, ...

  8. 图解Numpy的tile函数

    Numpy的tile(A, reps)函数,就是将原矩阵横向.纵向地复制.tile是瓷砖的意思,顾名思义,这个函数就是把数组像瓷砖一样铺展开来. 举个例子,原矩阵:  横向铺展:  纵向铺展: 横向铺 ...

  9. IO流与装饰者模式

    java使用IO流来处理不同设备之间数据的交互;所有的IO操作实际上都是对 Stream 的操作 从功能上划分: 输入流: 当数据从源进入的编写的程序时,称它为输入流; 输出流: 从程序输出回另一个源 ...

  10. Hbase如何批量删除指定数据

    有时我们需要批量删除一些hbase中符合某些条件的数据,本文提供一种简单的shell命令的方式批量删除hbase里的数据.思路就是,建立hive与hbase的关联表,通过hive sql查询出符合条件 ...