构建基于阿里云OSS的第三方文件上传RESTful接口
来源:互联网 发布:随机信号分析 知乎 编辑:程序博客网 时间:2024/05/29 18:37
转载请注明来源:http://blog.csdn.net/loongshawn/article/details/50719771
- 《构建基于阿里云OSS文件上传服务》
- 《构建基于OSS的第三方文件上传RESTful接口》
1.0 前言
随着自身业务的不断发展,慢慢开始关注OSS这种文件存储服务,当前我们利用OSS服务的主要目的就是存储WEB平台上用户上传的各种附件。
我的第一篇关于OSS服务的文章《构建基于阿里云OSS文件上传服务》主要讲了利用Java如何实现这种服务。虽说这种服务可以很方便的集成进WEB工程,但有时候我们想把这种文件上传服务做成通用的接口服务,以后不论是WEB工程,还是移动终端都可以调用这个接口来实现文件上传。
2.0 实现方式
基于SpringBoot实现RESTful接口服务。OSS文件上传接口主要包含两个部分:1、Http请求处理;2、OSS文件上传。
《构建基于阿里云OSS文件上传服务》文章中讲了“OSS文件上传”这部分,本篇文章主要讲前半部分“Http请求处理”。
3.0 Http请求处理
主要处理了以下两种方式的http请求:1、传统的File body提交的请求;2、Mutilpart body提交的请求。
在SpringBoot中我们利用Controller类来处理各种请求,如下面这种简单的HelloWorld请求:
package com.autonavi.controller;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.boot.autoconfigure.EnableAutoConfiguration;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.bind.annotation.RestController;/** * <p>Author: loongshawn * <p>Date: 15-09-22 * <p>Version: 1.0 */@SuppressWarnings("unused")@EnableAutoConfiguration@RestController@RequestMapping("/hello")public class HelloController { private static final Logger logger = LoggerFactory.getLogger(HelloController.class); @RequestMapping(method=RequestMethod.GET) private String view() { logger.info("HelloController.method [request result]:" + "Hello World!"); return "Hello World! <br>Version:v002-2015-11-12-pm <br>Release:2015/11/12 15:47 <br>Environment:Development Environment"; }}
这是一个get方法。在浏览器中输入http://localhost:7001/hello将会返回下述结果:
图1.请求方法
图2.返回结果
接下来,我们进入具体OSS请求处理分析。
3.1 传统的File body提交的请求
以下为代码片段,只摘录相关的片段。
@ResponseBody@RequestMapping(value = "/attachment/auth/{fileExtensionName}",method=RequestMethod.POST,consumes=MediaType.ALL_VALUE) private Response view(HttpServletRequest request ,@PathVariable String fileExtensionName){ // 初始化Response Response rsp = new Response(); String fileName = ""; try{ // 2016-02-19 文件上传升级OSS方式 fileName = FileUpload.fileUploadByOss(request, jsonObj); if(!fileName.equals("0001")){ // 封装返回结果 JSONArray jsonArray = new JSONArray(); JSONObject jsonObj_file = new JSONObject(); jsonObj_file.put("fileName", fileName); jsonArray.add(jsonObj_file);
上面请求hold方法中利用了fileUploadByOss()方法,改方法主要是获取HttpServletRequest的InputStream,然后利用经过封装的OSS上传方法上传。
// HttpServletRequest请求文件上传处理,融合OSS public static String fileUploadByOss(HttpServletRequest request,JSONObject jsonObj){ String return_url = null; String fileExtensionName = ""; String currentTime = ""; String type = ""; try{ if(jsonObj.containsKey("type")){ type = jsonObj.getString("type"); } if(jsonObj.containsKey("fileExtensionName")){ fileExtensionName = jsonObj.getString("fileExtensionName"); } if (!fileExtensionName.isEmpty()) { currentTime = Date2Str.getDate(0,3); String fileName = currentTime +"."+fileExtensionName; InputStream in = request.getInputStream(); String return_key = OSSUpload.put2(in,fileName); in.close(); if(return_key == null || return_key.length() <= 0){ return "0001"; } return_url = Constant.ossUrl + return_key; logger.info("FileUpload.fileUpload.HttpServletRequest [Success]: type-" + type +"url-"+return_url); } }catch (IOException e) { // TODO Auto-generated catch block logger.info("FileUpload.fileUpload [Exceptions]:" + e); return "0001"; } return return_url; }
封装过的OSS文件上传方法:
public static String put2(InputStream in, String filename){ String return_key = null; try { OSSClient client = DefaultOSSClient.getDefaultOSSClient(); if(in != null){ String fileName = filename; /** try { fileName = new String(filename.getBytes("ISO-8859-1"),"UTF-8"); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } **/ /** * getCurrentTimeStamp()方法为同步方法,确保时间戳的唯一性。 */ String timeStamp = Date2Str.getCurrentTimeStamp(); String timeDate = Date2Str.getCurrentDate5(); String key = Constant.bashFilePath + timeDate + timeStamp +"/"+fileName; client.putObject(new PutObjectRequest(Constant.bucketName, key, in)); return_key = key; } DefaultOSSClient.shutdownOSSClient(); } catch (ClientException e) { // TODO Auto-generated catch block // e.printStackTrace(); logger.info("OSSUpload.put2 error:" + e.toString()); return null; } return return_key; }
上传结果:请求成功,放回文件地址。
OSS管理平台显示结果:
3.2 Mutilpart body提交的请求
请求参数:MultipartFile
@ResponseBody@RequestMapping(value = "/attachment/auth/{fileExtensionName}",method=RequestMethod.POST) private Response view(@RequestParam MultipartFile file,@PathVariable String fileExtensionName){ // 初始化Response Response rsp = new Response(); String fileName = ""; try{ // 进入调度中心 fileName = FileUpload.fileUploadByOss(file, jsonObj); if(!fileName.equals("0001")){ // 封装返回结果 JSONArray jsonArray = new JSONArray(); JSONObject jsonObj_file = new JSONObject(); jsonObj_file.put("fileName", fileName); jsonArray.add(jsonObj_file);
处理Http hold中的MultipartFile文件:
// MultipartFile请求文件上传处理,融合OSS public static String fileUploadByOss(MultipartFile file,JSONObject jsonObj){ String return_url = null; String fileExtensionName = ""; if(jsonObj.containsKey("fileExtensionName") && !file.isEmpty()){ fileExtensionName = jsonObj.getString("fileExtensionName"); return_url = fileUpload(file,fileExtensionName); logger.info("FileUpload.fileUpload.MultipartFile [Success]: url-"+return_url); } return return_url; }
获取MultipartFile文件的InputStream,仍然利用方式1中的封装过的OSS文件上传方法。
// OSS MultipartFile请求文件上传处理 public static String fileUpload(MultipartFile mfile,String fileExtensionName){ String return_url = null; if(mfile != null){ InputStream in; try { String fileName = Date2Str.getDate(0,3) +"."+fileExtensionName; // logger.info("FileUpload.fileUpload [fileName]:" + fileName); in = mfile.getInputStream(); String return_key = OSSUpload.put2(in,fileName); return_url = Constant.ossUrl + return_key; in.close(); } catch (IOException e) { // TODO Auto-generated catch block logger.info("FileUpload.fileUpload [Exceptions]:" + e); return "0001"; } } return return_url; }
上传结果:请求成功,放回文件地址。
OSS管理平台显示结果:
4.0 后记
还有许多不足之处会在接下来实践中不断改进。
- 构建基于阿里云OSS的第三方文件上传RESTful接口
- 构建基于阿里云OSS文件上传服务
- 阿里云OSS 上传文件
- 阿里云OSS 文件上传
- 阿里oss文件上传
- 阿里云上传文件,下载文件 oss
- 文件上传-阿里云OSS-存储文件
- 文件上传结合springmvc至阿里云的oss
- 整合阿里云OSS文件上传1
- 整合阿里云OSS文件上传2
- OSS阿里云文件上传 demo
- Jfinal版阿里云OSS文件上传
- 阿里云OSS上传文件工具类
- android 阿里云OSS文件上传
- java 上传文件到oss(阿里云)
- 阿里云 oss服务器文件上传 java
- 上传文件到阿里云OSS
- springboot上传文件到阿里云OSS
- 关于NoSQL,你必须知道的九件事
- 人工智能 有限状态机 的时代过去了
- 【慕课笔记】第四章 JAVA中的集合框架(上) 第6节 学生选课—课程查询
- android adapter 操作Activity中的方法 ------------弱引用WeakReference----断点记录
- hadoop学习之路(一)hadoop集群服务搭建
- 构建基于阿里云OSS的第三方文件上传RESTful接口
- iOS 设备通用设备适配
- (p138)递归完成树的遍历
- 变相自定义input标签file类型样式
- Log4j扩展使用--日志记录器Logger
- 使用 markdownj 将 markdown 转换为 html
- java中final初探
- Windows中的基本概念和术语
- UVALive 5870 - Smooth Visualization