这里是修真院后端小课堂,每篇分享文从html
【背景介绍】【知识剖析】【常见问题】【解决方案】【编码实战】【扩展思考】【更多讨论】【参考文献】前端
八个方面深度解析后端知识/技能,本篇分享的是:java
【如何调用第三方API实现图片上传。】程序员
你们好,我是IT修真院郑州分院第11期的学员何爽,一枚正直纯洁善良的后端程序员,今天给你们分享一下,修真院官网java(职业)任务5,深度思考中的知识点——如何调用第三方API实现图片上传。spring
1.背景介绍数据库
在开发过程当中,不管是作网页仍是APP,基本上都会有图片上传的业务需求,最典型的就是注册帐号以后须要用户上传头像或者用户验证的时候上传身份证照片。json
而java中实现图片上传大概有两种形式:后端
一种是使用jsp+controller实现图片上传。api
一种是使用jsp+servlet实现图片上传;数组
存储基本上也有两种形式
在数据库中直接存储blob类型的图片或者图片存储在服务器上并在数据库中存储箱对应的路径。
如今主流的项目开发都是用的后者方式,这时就须要咱们使用第三方API
那么什么是API?
API 是用于构建应用程序软件的一组子程序定义,协议和工具。通常来讲,这是一套明肯定义的各类软件组件之间的通讯方法。
2.知识剖析
第三方对外一般会有API和SDK以便咱们使用,那么什么是SDK?
SDK (Software Development Kit)中文是"软体开发工具组",用来帮一个 产品、平台开发应用程式的工具组,
由产品的厂商提供给开发者使用的。辅助开发某一类软件的相关文档、范例和工具的集合均可以叫作“SDK”。
任务中使用的阿里云的对象存储OSS,讲一下什么是OSS。
阿里云对象存储服务(Object Storage Service,简称 OSS),是阿里云提供的海量、安全、低成本、高可靠的云存储服务。
能够经过调用 API,在任何应用、任什么时候间、任何地点上传和下载数据,也能够经过Web控制台对数据进行
简单的管理。OSS适合存听任意类型的文件,适合各类网站、开发企业及开发者使用。
在springmvc中,使用jsp+controller实现图片上传的基本思路是:
(1)使用MultipartFile类接收上传的图片;
(2)将图片存储在服务器(阿里云OSS),返回一个图片路径;
(3)图片路径存储在用户信息中以供调用。
3.常见问题
(1) form表单提交的是MultipartFile类型的文件,而第三方api须要的是file类型的文件,如何进行转换?
(2).如何经过调用阿里云API完成图片的上传
4.解决方案
(1)第一种方法:
MultipartFile file = xxx;
CommonsMultipartFile cf= (CommonsMultipartFile)file;
DiskFileItem fi = (DiskFileItem)cf.getFileItem();
File f = fi.getStoreLocation();
会在项目的根目录的临时文件夹下生成一个文件。
第二种方法:
transferTo(File dest);
会在项目中生成一个新文件;
第三种方法:
File f = (File) xxx 强转便可。前提是要配置multipartResolver,要否则会报类型转换失败的异常。
<bean id="multipartResolver"
<property name="maxUploadSize" value="104857600"/>
<property name="maxInMemorySize" value="4096"/>
</bean>
第四种方法:
Workbook wb = Workbook.getWorkbook(xxx .getInputStream());
转换为输入流,直接读取;
第五种方法:
byte[] buffer = myfile.getBytes();
先转换为字节数组。
(2)详见第四个模块编码实战
5.编码实战
6.扩展思考
集成第三方接口的技巧总结:
调用接口其实也差很少是这样:
发送请求(向第三方发送请求,传递参数)——收到数据(收到第三方的返回数据)——数据处理(数据解析)——返回前端——前端处理(前端展现封装数据)。
1)api文档阅读:主要看请求参数和返回数据,有些文档有不少demo,这些demo会帮助咱们不少。
参考这个内容:http://www.pmcaff.com/discuss...
2)json数据解析:net.fs.json仍是阿里的fastjson仍是jacksondegnd
具体参考:https://www.cnblogs.com/huoer...
3)调用第三方使用的工具:Httpclient、urlConnection仍是RestTemplate
具体内容参考:http://blog.csdn.net/lmb55/ar...
7.参考文献
https://www.cnblogs.com/fengl...
https://blog.csdn.net/qq_4180...
https://blog.csdn.net/qq_4181...
8.更多讨论
Q1:提问人:张亚强:
腾讯cos和阿里oss第三方对象存储有什么异同?
A1:回答人(何爽):
就我的理解其二者并无什么大的不一样,我的理解二者都是一个远程内存罢了,oss能够自我添加水印,缩略图,防盗链等,但cos却不能够自我添加,须要引入第三方jar包实现。
Q2:提问人:张亚强
上传图片时是否能够经过字符流进行上传?
A2:回答人(何爽):
不能,由于图片是二进制编码。
Q3:提问人:周宏浩
拦截器怎么拦截图片?
A3:回答人(何爽):
在from里面加入了enctype="multipart/form-data" 就能够了。