java接受安卓及ios App上传的图片,并保存到阿里OSS
做后台的时候,写了两个方法,分别用来获取安卓和苹果IOS端上传的头像,保存到阿里云OSS图片存储服务器上。(SMM框架)
安卓及H5版本:
/**
* 上传用户头像
*/
@RequestMapping("/uploadPhoto")
public R uploadPhoto(@RequestParam("imgFile") MultipartFile imgFile, HttpServletRequest req) throws Exception {
if (imgFile.isEmpty()) {
throw new RRException("上传文件不能为空");
} Integer uid = WebUtils.getUid(req);
WfMemberEntity member = memberService.queryObject(uid); String newsUrl = "";
if (!((MultipartFile) imgFile).isEmpty()) {
try {
newsUrl = OSSUtil.addFile(imgFile, "head", Constants.IGM_BUCKET); } catch (IOException e) {
e.printStackTrace();
}
}else {
return R.error("上传图片不可为空");
}
if(member.getHeadimage() == null) {
member.setHeadimage(newsUrl);
member.setThumbimg(newsUrl);
memberService.update(member);
}else {
// 删除原来图片
OSSUtil.delete(member.getHeadimage(), Constants.IGM_BUCKET);
member.setHeadimage(newsUrl);
member.setThumbimg(newsUrl);
memberService.update(member);
}
System.out.println("*************************************头像路径: "+newsUrl+"***************************************");
return R.ok().put("url", newsUrl);
}
对应的苹果图片上传版本:
@RequestMapping("/iosUpload")
public R iosUpload(HttpServletRequest req){ Integer uid = WebUtils.getUid(req);
WfMemberEntity member = memberService.queryObject(uid); String image = req.getParameter("image");
// 将base64 转 字节数组
Base64 base = new Base64();
byte[] decode = base.decode(image); // 定义图片输入流
InputStream fin = new ByteArrayInputStream(decode); String newsUrl = "";
try {
newsUrl = OSSUtil.putFile(fin, "head", Constants.IGM_BUCKET);
} catch (IOException e) {
e.printStackTrace();
}
if(member.getHeadimage() == null) {
member.setHeadimage(newsUrl);
member.setThumbimg(newsUrl);
memberService.update(member);
}else {
// 删除原来图片
OSSUtil.delete(member.getHeadimage(), Constants.IGM_BUCKET);
member.setHeadimage(newsUrl);
member.setThumbimg(newsUrl);
memberService.update(member);
}
System.out.println("*************************************头像路径: "+newsUrl+"***************************************");
return R.ok().put("url", newsUrl);
}
对应的OSS上传工具:
package com.wfcm.utils; import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List; import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.commons.CommonsMultipartFile; import com.aliyun.oss.OSSClient;
import com.aliyun.oss.model.ListObjectsRequest;
import com.aliyun.oss.model.OSSObject;
import com.aliyun.oss.model.OSSObjectSummary;
import com.aliyun.oss.model.ObjectListing;
import com.aliyun.oss.model.ObjectMetadata;
import com.wfcm.utils.UUIDGenerator; /**
* 阿里云分布式存储工具类
* @author lyinlong
*
*/
public class OSSUtil { //初始化client
static OSSClient client = new OSSClient(Constants.OSS_ENDPOINT,Constants.OSS_ACCESS_ID, Constants.OSS_ACCESS_KEY); /**
* 获取指定文件夹下的文件列表
* @param folderName 文件夹名称(如果获取当前所有, 空字符串)
* @return 文件的所有key
* @throws IOException
*/
public static List<String> listBybucket(String bucketName ,String folderName) throws IOException{
// 构造ListObjectsRequest请求
ListObjectsRequest listObjectsRequest = new ListObjectsRequest(bucketName); // 递归列出fun目录下的所有文件
listObjectsRequest.setPrefix(folderName); ObjectListing listing = client.listObjects(listObjectsRequest); List<String> keys = new ArrayList<>(); // 遍历所有Object
for (OSSObjectSummary objectSummary : listing.getObjectSummaries()) {
keys.add(objectSummary.getKey());
}
return keys;
} /**
* 通过key获取指定的Object
* @param key
* @return
*/
public static InputStream getObject(String bucketName, String key){
OSSObject object = client.getObject(bucketName, key);
InputStream objectContent = object.getObjectContent(); return objectContent;
} /**
* 添加一个文件到指定文件夹
* @param file
* @param folder
* @return 该文件的Key(文件的唯一标识)
* @throws FileNotFoundException
*/
public static String putObject(File file , String folder , String bucketName) throws FileNotFoundException{
// 获取指定文件的输入流
InputStream content = new FileInputStream(file); // 创建上传Object的Metadata
ObjectMetadata meta = new ObjectMetadata(); // 必须设置ContentLength
meta.setContentLength(file.length()); String uuid = UUIDGenerator.getUUID(false); client.putObject(bucketName, folder+"/"+uuid, content, meta); return uuid;
} public static String putFile(InputStream content , String folder , String bucketName) throws FileNotFoundException{
// 获取指定文件的输入流
//InputStream content = new FileInputStream(file); // 创建上传Object的Metadata
ObjectMetadata meta = new ObjectMetadata(); // 必须设置ContentLength
try {
meta.setContentLength(content.available());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} String uuid = UUIDGenerator.getUUID(false);
client.putObject(bucketName, folder+"/"+uuid+".jpg", content, meta); return folder+"/"+uuid+".jpg";
} public static String addFile(Object file , String folder , String bucketName) throws IOException{
InputStream content = null;
ObjectMetadata meta = null;
String extension = "";
if(file!=null){
if(file instanceof CommonsMultipartFile){
CommonsMultipartFile file1 = (CommonsMultipartFile)file;
//文件扩展名
String fileName = file1.getOriginalFilename();
if(fileName.lastIndexOf(".")!=-1){
extension = fileName.substring(fileName.lastIndexOf("."),fileName.length());
} // 获取指定文件的输入流
content =file1.getInputStream();
// 创建上传Object的Metadata
meta = new ObjectMetadata();
// 必须设置ContentLength
meta.setContentLength(file1.getSize());
// 设置content type
String strContentType = file1.getContentType();
meta.setContentType(strContentType);
}
else if(file instanceof MultipartFile){
MultipartFile file2 = (MultipartFile)file;
String fileName = file2.getOriginalFilename();
if(fileName.lastIndexOf(".")!=-1){
extension = fileName.substring(fileName.lastIndexOf("."),fileName.length());
}
// 获取指定文件的输入流
content =file2.getInputStream();
// 创建上传Object的Metadata
meta = new ObjectMetadata();
// 必须设置ContentLength
meta.setContentLength(file2.getSize());
}
else if(file instanceof File){
File file3 = (File)file;
//文件扩展名
String fileName = file3.getName();
if(fileName.lastIndexOf(".")!=-1){
extension = fileName.substring(fileName.lastIndexOf("."),fileName.length());
} // 获取指定文件的输入流
content =new FileInputStream(file3);
// 创建上传Object的Metadata
meta = new ObjectMetadata();
// 必须设置ContentLength
meta.setContentLength(file3.length());
}
else {
return null;
}
}
String uuid = UUIDGenerator.getUUID(false); client.putObject(bucketName, folder+"/"+uuid+extension, content, meta); return folder+"/"+uuid+extension;
} /**
* 删除指定的文件
* @param key
*/
public static void delete(String key,String bucketName){ client.deleteObject(bucketName, key);
} /**
* 新建文件桶
* @param bucketName
*/
public static void createBucket(String bucketName){
client.createBucket(bucketName);
} }
java接受安卓及ios App上传的图片,并保存到阿里OSS的更多相关文章
- Ios App上传步骤
前言:作为一名IOS开发者,把开发出来的App上传到App Store是必须的.下面就来详细介绍下具体流程. 1.打开苹果开发者中心:https://developer.apple.com 打开后点击 ...
- iOS app上传错误集锦(转载)
1.工程里增加了版本自动更新. 2.未增加判断网络状态的类Reachability. 3.问题:error itms -90049 This bundel is invalid. The bundle ...
- IOS APP 上传到AppStore
由于第一次接触要把 app 上传到 AppStore 比较棘手,很多地方不懂,研究了 大半天 终于给上传成功了,现在坐等审核吧,首先把上传到AppStore的流程 整理下 : 第一 :准备证书 (要确 ...
- java后台接受app上传的图片
package com.sujinabo.file; import java.io.File; import java.io.FileOutputStream; import java.io.IOEx ...
- iOS App上传中遇到的问题
1. 今天打包上传文件时出现“Missing iOS Distribution signing identity for XXXX” 导致问题的原因是:下边这个证书过期了 以下是苹果官方给出的回应: ...
- iOS APP 上传
原地址:http://www.cnblogs.com/uvsjoh/archive/2012/11/14/2769739.html 流程:1 开发好要发布的程序 -- 需要在程序中包含符合要求规格的i ...
- ipcloud上传裁切图片,保存为base64再压缩传给后台
<!doctype html> <html> <head> <meta charset="utf-8"> <meta name ...
- BBS(第三天) 如何吧用户上传的图片文件保存到本地
1. 将用户上传的所有静态文件统一管理 -- settings.py -- MEDIA_ROOT = os.path.join(BASE_DIR, 'media') 2. 服务器会对外公开一下服务器静 ...
- 各大安卓应用市场APP上传提交与收录
360 提交网址 应用宝 提交网址 百度 提交网址 91 提交网址 安卓 提交网址 PP助手 提交网址 小米 提交网址 华为 提交网址 OPPO 提交网址 魅族 提交网址 乐视 提交网址 豌豆荚 提交 ...
随机推荐
- 深入理解android6.0 RunTime Permisstion
了解下runtime permission 2015.8 google发布了android 6.0,sdk版本为23,一款"为工作升级而生"的android系统.如6.0新加入的指 ...
- android:padding和android:margin的区别 详解
转载请说明博客地址:http://blog.csdn.net/qq_32059827/article/details/51487997 看了网上的类似博客,并没有给出确定的区别.现在具体分析一下pad ...
- 【shell脚本练习】grep sed awk
下面是简单学习之后做得练习题,如果有不对的或者说解题思路不好的,请交流啊. Grep 练习 文件名grepfile Steve Blenheim:238-923-7366:95 Latham Lane ...
- Linux Shell -- 无网不利
这篇文章中我介绍几个非常实用的和网络相关的命令 一.ifconfig 这个命令在Windows下被"翻译为ipconfig",它用于显示网络接口,子网掩码等详细信息. 注:在每个系 ...
- Swift基础之UITableView(之前写的知识点都是最新的2.2版本样式,欢迎大家参考,可以相互交流)
//这里只是列举了经常使用的UITableView的属性和方法,其他的都可以类似使用,注意用法即可 //设置全局变量UITableView var myTableView = UITa ...
- libevent之Reactor模式
通过前边的一篇博文轻量级网络库libevent初探,我们知道libevent实际上是封装了不同操作系统下的/dev/poll.kqueue.event ports.select.poll和epoll事 ...
- 【65】Mybatis详解
Mybatis介绍 MyBatis是一款一流的支持自定义SQL.存储过程和高级映射的持久化框架.MyBatis几乎消除了所有的JDBC代码,也基本不需要手工去设置参数和获取检索结果.MyBatis能够 ...
- 用LED灯和按键来模拟工业自动化设备的运动控制
开场白: 前面三节讲了独立按键控制跑马灯的各种状态,这一节我们要做一个机械手控制程序,这个机械手可以左右移动,最左边有一个开关感应器,最右边也有一个开关感应器.它也可以上下移动,最下面有一个开关感应器 ...
- ExtJS:菜单ComboBox及级联菜单应用
首页一级菜单查询分组,二级菜单查询分组中的车辆信息. 定义分组数据模型: Ext.define( 'group', { extend:'Ext.data.Model', fields:[ {name: ...
- SharePoint 搜索爬网第三方网站配置
介绍:SharePoint的搜索着实强大,而且最近用到SharePoint搜索第三方爬网,感觉收获挺大,而且网上资料没找到太多类似的,就小记录一下,分享给大家. 首先,我自己写了一个net页面,里面读 ...