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 提交网址 魅族 提交网址 乐视 提交网址 豌豆荚 提交 ...
随机推荐
- 为什么会存在using filesort
当使用explain分析SQL时常常会遇到extra的其中一值为using filesort,如: PRIMARY KEY (`id`), KEY `uid` (`uid`) explain se ...
- Java 8新特性探究(五)Base64详解
BASE64 编码是一种常用的字符编码,在很多地方都会用到.但base64不是安全领域下的加密解密算法.能起到安全作用的效果很差,而且很容易破解,他核心作用应该是传输数据的正确性,有些网关或系统只能使 ...
- Java 中Log4j的使用详情
Log4j 真的很简单,简单到令人发指的地步.不是要记录日志吗?那就给你一个Log ,然后你用Log 来写东西就行了,先来一个完整类示例: package test; import org.apach ...
- Uva - 804 - Petri Net Simulation
Input: petri.in A Petri net is a computational model used to illustrate concurrent activity. Each Pe ...
- UNIX环境高级编程——UNIX基础知识
1.用户在登陆linux系统时,先键入登录名,然后键入口令.系统在其口令文件(通常是/etc/passwd文件)中查看登录名.口令文件中的登陆项由7个以冒号分隔的字段组成,它们是:登录名.加密口令.数 ...
- Linux多线程实践(6) --Posix读写锁解决读者写者问题
Posix读写锁 int pthread_rwlock_init(pthread_rwlock_t *restrict rwlock, const pthread_rwlockattr_t *rest ...
- 【一天一道LeetCode】#63. Unique Paths II
一天一道LeetCode (一)题目 Follow up for "Unique Paths": Now consider if some obstacles are added ...
- naoting
生活就像一锅菠菜汤 20160714 夜
- vs2010 单文档MFC 通过加载位图文件作为客户区背景
实现效果: 这个其实是一个非常常见的功能,大家都会考虑给自己简单的工程做一个背景界面.其实只要在view类中重载OnEraseBkgnd()这个函数就好了. 代码如下: BOOL CdddView:: ...
- Dynamics CRM 2011/2013 DeveloperToolkit的使用
Dynamic CRM 2011的SDK中提供了一个叫DeveloperToolkit的工具,他的用途官方说明说的很明确,能方便开发者在VS中直接部署webresource.plugin.workfl ...