关于web项目中的图片上传、并显示问题

一、数据库存储

  直接把图片的二进制码存到数据库,可参考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 appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true">

        <!-- SingleSignOn valve, share authentication between web applications
             Documentation at: /docs/config/valve.html -->
        <!--
        <Valve className="org.apache.catalina.authenticator.SingleSignOn" />
        -->

        <!-- Access log processes all example.
             Documentation at: /docs/config/valve.html
             Note: The pattern used is equivalent to using pattern="common" -->
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" pattern="%h %l %u %t &quot;%r&quot; %s %b" prefix="localhost_access_log" suffix=".txt"/>
		<!-- 下面两条主要是tomcat转发图片请求到相应的电脑物理磁盘位置 -->
  	<Context path="/upload" docBase="F:\study_teacher\text20\out\artifacts\text20_war_exploded\upload"></Context>		
      <Context docBase="D:\Program Files (x86)\tomcat\apache-tomcat-8.5.34-windows-x64\apache-tomcat-8.5.34\wtpwebapps\atcrowdfunding-web" path="/atcrowdfunding-web" reloadable="true" source="org.eclipse.jst.jee.server:atcrowdfunding-web"/>
</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

posted @ 2019-05-22 21:35  麦田的老哥  阅读(65)  评论(0)    收藏  举报