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 提交网址 魅族 提交网址 乐视 提交网址 豌豆荚 提交 ...
随机推荐
- UNIX环境高级编程——I/O多路转接(select、pselect和poll)
I/O多路转接:先构造一张有关描述符的列表,然后调用一个函数,直到这些描述符中的一个已准备好进行I/O时,该函数才返回.在返回时,它告诉进程哪些描述符已准备好可以进行I/O. poll.pselect ...
- Could not find property 'outputFile
* What went wrong: A problem occurred configuring project ':app'. > Could not find property 'outp ...
- C语言之统计输入字符数量
这个程序市委了统计所输入的数字或者英文字母的数字的数量,当然稍加改动便可以统计特殊字符的个数,在此不再冗叙. 代码如下: #include <iostream> using namespa ...
- iOS开发 支付之银联支付集成
iOS开发之银联支付集成 最近在做支付这一块的东西,就记录下来以便以后参考和各位交流学习,这里是银联支付 银联官网在这里,这里能下载SDK或者是看文档.文档嘛,对银联来说,还是不要看的太仔细的好,以前 ...
- 《15个提高Google搜索的技巧》
为了得到更加「多元化」的搜索结果,虽然 Google 目前访问起来并不是那么方便,但是仍然有很多人把它作为常用搜索引擎在使用. 其实除了最简单的关键词搜索之外,搜索引擎还提供了很多精细化的搜索功能,如 ...
- 对Linux0.11 中 进程0 和 进程1分析
1. 背景 进程的创建过程无疑是最重要的操作系统处理过程之一,很多书和教材上说的最多的还是一些原理的部分,忽略了很多细节.比如,子进程复制父进程所拥有的资源,或者子进程和父进程共享相同的物理页面,拥有 ...
- Android调用binder实现权限提升-android学习之旅(81)
当进程A权限较低,而B权限较高时,容易产生提权漏洞 fuzz测试的测试路径 First level Interface是服务 Second level Interface是服务中对应的接口 1.首先获 ...
- 用boost::bind构造boost::coroutine
class TestCoro { ... typedef boost::coroutines::coroutione<void ()> Coro; void CoroFun(Coro::c ...
- MVC学习笔记(一)
首先感谢慕课网这个平台提供给我的学习机会,感谢PengCheng老师的"MVC架构模式分析与设计课程". 1.数组的声明: $controllerAllow = array('te ...
- Android Studio 使用SlidingMenu侧滑菜单
SlidingMenu是十分常用的开源框架,提供了一个滑动侧边栏的功能. 看了许多教程,都是往eclipse导入SlidingMenu库的,随后百度了几篇Android Studio导入的教程,鼓捣了 ...