微信小程序> java图片上传保存至服务器并返回可下载的URL

java图片上传保存至服务器并返回可下载的URL

浏览量:673 时间: 来源:张Sir66666

java图片上传保存至服务器并返回可下载的URL

    • 1.需求来源
    • 2.解决思路
    • 3.开始干活(直接上代码)
    • 4.总结

1.需求来源

上周要做一个功能,需求是: 微信小程序开发的程序会传一张图片到后台java接口,后台接收到图片保存在数据库。起先,我们是用图片转换成base64编码然后保存在数据库。但是,这样数据量大了以后,传输和查询特别慢。后面改为对上传的图片进行处理,保存到服务器本地文件夹中,并且生成一个可以直接访问的url路径中过程的思考?

2.解决思路

要实现的功能其实看起来也很简单呀。主要是思路。前一部分接口接收到图片保存到本地服务器指定目录下,这个毫无问题。关键是:根据图片生成一个可以访问的URL路径,用于前端展示。
第一步,将图片保存到本地,并且根据保存的路径生成一个绝对路径。
第二步,开一个服务,启一个端口(注:服务与图片放在同一个服务器上面),用于获取服务器上面的图片。
第三步,浏览器访问IP地址+端口+图片路径。从上到下是一个思考的过程,想想没毛病。但是,我用这种方式,自己在浏览器作测试,怎么访问都是404,想想肯定是哪里错了。最后,根据度娘的指引,看到了WebMvcConfigurationSupport这个类(可以自定义资源映射路径)。在这个类里面定义一个虚拟路径对应的真实路径即可,访问通过虚拟路径访问,映射到真实路径,这样我们在接口访问的时候,直接会连接到本地的真实路径里获取图片。我们还可以写个拦截器,限制访问来源和接口参数验证,对于防止恶意攻击有好处,剩下的可以自由发挥。

3.开始干活(直接上代码)

1.新建springboot项目,写一个上传类

package com.file.upload.config;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.http.converter.HttpMessageConverter;import org.springframework.http.converter.StringHttpMessageConverter;import org.springframework.web.servlet.config.annotation.ContentNegotiationConfigurer;import org.springframework.web.servlet.config.annotation.CorsRegistry;import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;import java.nio.charset.Charset;import java.util.List;/** * @Author: Mr sheng.z * @Description: * @Date: Create in 10:11 2019/11/26 */@Configurationpublic class WebMvcConfig extends WebMvcConfigurationSupport {    @Override    public void addResourceHandlers(ResourceHandlerRegistry registry){        //上传的图片在D盘下的downLoad目录下,访问路径如:http://localhost:8899/downLoad/d3cf0281-bb7f-40e0-ab77-406db95ccf2c.jpg        //file作用 指定文件传输协议 获取电脑文件一般都是file        registry.addResourceHandler("/downLoad/**").addResourceLocations("file:D:\picturePath\");        super.addResourceHandlers(registry);    }    @Override    public void addCorsMappings(CorsRegistry registry) {        //设置允许跨域的路径        registry.addMapping("/**")                //设置允许跨域请求的域名                .allowedOrigins("*")                //是否允许证书 不再默认开启                .allowCredentials(true)                //设置允许的方法                .allowedMethods("GET", "POST", "PUT", "DELETE")                //跨域允许时间                .maxAge(3600);    }    /**     * 全局设置编码格式     * @return     */    @Bean    public HttpMessageConverterString responseBodyConverter() {        return new StringHttpMessageConverter(Charset.forName("UTF-8"));    }}

3.postman接口测试参数
小程序

4.浏览器访问效果小程序

4.总结

我们采用这种方式的好处就是我们即达到了我们想要的效果,又隐藏了我们真实的物理路径,保证了安全性,而且这样如果后期需要外网访问的话,直接配置一个外网映射即可。
这个过程中主要是第三步,如果不知道有这个可以配置映射关系的话,可能我们只能用一些成熟的服务,比如七牛云,影像服务等太过于麻烦。有点,杀鸡焉用牛刀的感觉。
下面附上项目源码地址:上传服务源码

欢迎大家关注我的个人公众号一起成长,一起进步 。本人比较才疏学浅,如有错误,欢迎指正

小程序

版权声明

即速应用倡导尊重与保护知识产权。如发现本站文章存在版权问题,烦请提供版权疑问、身份证明、版权证明、联系方式等发邮件至197452366@qq.com ,我们将及时处理。本站文章仅作分享交流用途,作者观点不等同于即速应用观点。用户与作者的任何交易与本站无关,请知悉。

产品经理

手机 : 13312967497

擅长 : 小程序流量变现

扫码领取礼包

热门模板

  • 头条
  • 搜狐
  • 微博
  • 百家
  • 一点资讯
  • 知乎