搭建一个用于学习的 图片服务器的过程记录

 1, 使用IDEA创建一个maven的web工程, 作为服务器只需要在webapp下创建一个images文件夹作为图片的存储目录,然后在web.xml里面配置tomcat插件, 虚拟路径设置为/, 端口号改为 8003,防止8080端口被意外占用.

 2, 使用springMVC的文件上传测试效果,,但是此上传只能上传到当前服务器, 此时需要导入跨服务器上传文件的jar包工具,依赖如下:

<dependency>
    <groupId>com.sun.jersey</groupId>
    <artifactId>jersey-core</artifactId>
    <version>1.18.1</version>
</dependency>
<dependency>
    <groupId>com.sun.jersey</groupId>
    <artifactId>jersey-client</artifactId>
    <version>1.18.1</version>
</dependency>

3,配置springMVC的文件上传解析器等就不写了,,后台上传代码如下:

@Value("${FILE_SERVER_URL}")
    private String file_server_url;

@RequestMapping("/upload.do")
    public Result upload(MultipartFile file) {
        //接收到上传的文件,获取他的后缀名
        String originalFilename = file.getOriginalFilename();
        String extname = originalFilename.substring(originalFilename.lastIndexOf(".") );
        String uuid = UUID.randomUUID().toString().replaceAll("-", "").toUpperCase();
        String url = file_server_url+uuid+extname;
        //创建一个上传客户端对象
        Client client = Client.create();
        //连接到图片服务器
        WebResource webResource = client.resource(url);
        try {
            //上传图片
            webResource.put(file.getBytes());
           // System.err.println("url = " + url);
            return new Result(true, url);
        } catch (Exception e) {
            e.printStackTrace();
            return new Result(false, "上传失败");
        }
    }

4, 测试一跑, 报错,文件上传失败,,查看报错信息  : "返回了一个403状态码" . 403是权限不足的意思,  得知tomcat默认跨服务器之间是 只读 状态,需要配置tomcat为 可读写状态,但是IDEA的maven插件中无法修改配置文件(可能是我不会配置吧), 只好把web.xml中的插件清除, 然后在idea中集成我电脑上的tomcat, 然后修改tomcat的conf文件夹下web.xml文件,修改如下:

<servlet>
        <servlet-name>default</servlet-name>
        <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
        <init-param>
            <param-name>debug</param-name>
            <param-value>0</param-value>
        </init-param>

<!--在这里加入下面这段,,将只读设置为false-->
		<init-param>
            <param-name>readonly</param-name>
            <param-value>false</param-value>
        </init-param>
<!-- 上面这段-->

        <init-param>
            <param-name>listings</param-name>
            <param-value>false</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

 然后在idea中tomcat部署的选项中 勾选: Deploy Applications configured in Tomcat instance 这个选项, 重新启动服务器再次测试

理论上应该成功的,结果是没有报403 的错误了,,但是又报了一个409的 状态码的错误, 409代表服务器内运行有冲突,,网上查了下资料,说是路径有问题,,对比了下路径貌似没有问题啊

5, 由于我的images文件夹是 空的,我往里面添加了一个测试的html文件,然后用浏览器访问,访问成功,路径没问题呀,,  然后我又试着上传了一次, 这次居然成功了!!!!  我想到难道这和空文件夹有关,,?

6文件上传成功,按道理讲,图片服务器就搭建好了,但是此时还存在一个大问题: 此时上传的图片全是保存在部署到Tomcat的webapps下的ROOT 文件夹下的images中, 这个ROOT文件夹就是我们的图片服务器, 当在IDEA中重启tomcat时,会重新部署项目到这里,此时项目就会被覆盖,之前上传的图片将全部消失,那么之前保存下来的url地址将全部失效,怎么解决呢?

7, 接下来需要在tomcat的conf文件夹下的server.xml 文件中添加 自定义地址映射的配置 配置添加如下:    在host标签中添加:

<Context path="/images" docBase="E:\project\pinyougou_image" reloadable="true" />

然后重启图片服务器, 测试上传图片,此时图片顺利存储到映射的本地文件夹下了,而访问的url不变,这样即使重启tomcat也不会造成无法访问的问题了,至此,图片服务器搭建成功!

猜你喜欢

转载自blog.csdn.net/weixin_40427212/article/details/84108813