资讯专栏INFORMATION COLUMN

springmvc 接收上传图片并且存储至本地目录

SimpleTriangle / 3048人阅读

摘要:图片存储的方式为存储在虚拟目录下并返回虚拟目录的路径。如果是将开发的包直接部署在服务器中,则参考配置虚拟目录。

序言:项目环境

本次简单的demo是建立在springmvc框架上的,部署环境为tomcat,前段使用的bootstrap+jquery_file_upload组件。图片存储的方式为存储在虚拟目录下并返回虚拟目录的路径。建议先搭配好springmvc环境再继续参考本博客。没有搭配好环境的可以参考这篇博客

图片存储方式

在给出上传图片的代码之前,先讲解一下服务器接收图片上传的思路。服务器端保存图片一般有两种思路。

将图片以blob的格式存储在数据库中,仅适用于图片较小的场景

将图片存储在服务器的目录下,并在数据库中存储图片路径和访问URL,缺点是可能会造成服务器性能的下降

将图片存储在非服务器目录的任意路径下,在服务器中配置虚拟目录,通过虚拟目录访问图片目录下的图片

在这里我将主要讲一下如何实现第三种图片存储。
在开发环境中,可以直接使用Intellij来配置tomcat虚拟目录。因为Intellij管理下的tomcat实际上是一个tomcat虚拟映像,所以Intellij中的配置将不会影响实际tomcat中的配置。所以如果是在开发测试的过程中直接使用Intellij部署项目,请参考Intellij中配置虚拟目录。如果是将开发的war包直接部署在服务器中,则参考tomcat配置虚拟目录。

Intellij中配置虚拟目录


进入tomcat配置管理页面,点击deployment标签,然后点击左下角的加号选择‘external source’,并添加相应的虚拟目录所在的真实路径。最后在Application context中配置虚拟目录的访问路径。

Tomcat中配置虚拟目录

在tomcat中配置虚拟目录的方法有多种,详细介绍可以参考这两篇博客
http://www.cnblogs.com/love54...
https://my.oschina.net/liangz...
在这里 我想要介绍的方法是,在Catalina中配置多带带的虚拟目录。


找到/TOMCAT_HOME/conf/Catalina/localhost文件夹,在该文件夹下新建一个xml文件,xml文件的文件名就是虚拟目录对应的访问路径名,如果需要多级目录,则用#分割开来,例如psm#pc.xml对应的访问路径就是/psm/pic。在该xml文件中配置虚拟目录,语法如下


reloadale是说如果其中发生变化,是否重新加载。在结束配置后,无需重启服务器就可以直接用该路径访问虚拟目录。
图片上传和接收

在前端,使用bootstrap和juery_file_upload插件进行图片上传,简单的html页面如下

    
    
        ...
        

controller接收上传文件的请求,在这里可以参考这篇博客
java存储文件的代码如下,该方法将图片的字节流转换为文件并存储在相应的图片路径下,也就是我们之前配置的虚拟目录之下。

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Date;

/**
 * Created by rale on 5/29/17.
 * 将图片存储至本地
 */
public class FileUtil {

    public static void save(byte[] bytes, String fileName, String path) throws IOException {
        createDirectory(path);
        FileOutputStream os = new FileOutputStream(path + fileName);
        os.write(bytes);
        os.close();
    }

    private static boolean isExistPath(String path) {
        File file = new File(path);
        if (file.exists()) {//判断文件目录的存在
            return true;
        }else{
            return false;
        }
    }
    private static void createDirectory(String path){
        if(!isExistPath(path)){
            File file=new File(path);
            file.mkdirs();
        }
    }
}


想要了解更多开发技术,面试教程以及互联网公司内推,欢迎关注我的微信公众号!将会不定期的发放福利哦~

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/67132.html

相关文章

  • FastDFS Docker化部署 以及 Java SpringMVC实践

    摘要:启动后会连接到告知自己的信息,形成映射关联,并采用心跳机制保持状态。存储节点负责文件的存储,可以集群部署。一个卷组内之间相互通信,文件进行同步,保证卷内完全一致,所以一个卷的容量以最小的服务器为准。 简介 FastDFS是一个轻量级分布式文件系统。可以对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,而且可以集群部署,有高可用保障。相应的竞品有Ceph、T...

    li21 评论0 收藏0
  • FastDFS Docker化部署 以及 Java SpringMVC实践

    摘要:启动后会连接到告知自己的信息,形成映射关联,并采用心跳机制保持状态。存储节点负责文件的存储,可以集群部署。一个卷组内之间相互通信,文件进行同步,保证卷内完全一致,所以一个卷的容量以最小的服务器为准。 简介 FastDFS是一个轻量级分布式文件系统。可以对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,而且可以集群部署,有高可用保障。相应的竞品有Ceph、T...

    lemanli 评论0 收藏0
  • SpringMVC【参数绑定、数据回显、文件上传

    摘要:那我们就不用在每一个方法通过将数据传到页面。还能够配置该参数是否是必须的。方法的返回值有种重定向转发内部就是将数据绑定到域对象中的。注解能够将数据绑定到中也就是中,如果经常需要绑定到中的数据,抽取成方法来使用这个注解还是不错的。 前言 本文主要讲解的知识点如下: 参数绑定 数据回显 文件上传 参数绑定 我们在Controller使用方法参数接收值,就是把web端的值给接收到Cont...

    Flink_China 评论0 收藏0
  • 程序员鱼皮 表情包网站项目学习

    摘要:我们可以来看看数据库这个字段就是判断我们的这条数据是否是有效的,表示这条数据是有效的,表示这条数据是无效的。 ? 技术栈 后端 Java 8开发框架:SpringB...

    Yangder 评论0 收藏0

发表评论

0条评论

SimpleTriangle

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<