做后台的时候,写了两个方法,分别用来获取安卓和苹果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的更多相关文章

  1. Ios App上传步骤

    前言:作为一名IOS开发者,把开发出来的App上传到App Store是必须的.下面就来详细介绍下具体流程. 1.打开苹果开发者中心:https://developer.apple.com 打开后点击 ...

  2. iOS app上传错误集锦(转载)

    1.工程里增加了版本自动更新. 2.未增加判断网络状态的类Reachability. 3.问题:error itms -90049 This bundel is invalid. The bundle ...

  3. IOS APP 上传到AppStore

    由于第一次接触要把 app 上传到 AppStore 比较棘手,很多地方不懂,研究了 大半天 终于给上传成功了,现在坐等审核吧,首先把上传到AppStore的流程 整理下 : 第一 :准备证书 (要确 ...

  4. java后台接受app上传的图片

    package com.sujinabo.file; import java.io.File; import java.io.FileOutputStream; import java.io.IOEx ...

  5. iOS App上传中遇到的问题

    1. 今天打包上传文件时出现“Missing iOS Distribution signing identity for XXXX” 导致问题的原因是:下边这个证书过期了 以下是苹果官方给出的回应: ...

  6. iOS APP 上传

    原地址:http://www.cnblogs.com/uvsjoh/archive/2012/11/14/2769739.html 流程:1 开发好要发布的程序 -- 需要在程序中包含符合要求规格的i ...

  7. ipcloud上传裁切图片,保存为base64再压缩传给后台

    <!doctype html> <html> <head> <meta charset="utf-8"> <meta name ...

  8. BBS(第三天) 如何吧用户上传的图片文件保存到本地

    1. 将用户上传的所有静态文件统一管理 -- settings.py -- MEDIA_ROOT = os.path.join(BASE_DIR, 'media') 2. 服务器会对外公开一下服务器静 ...

  9. 各大安卓应用市场APP上传提交与收录

    360 提交网址 应用宝 提交网址 百度 提交网址 91 提交网址 安卓 提交网址 PP助手 提交网址 小米 提交网址 华为 提交网址 OPPO 提交网址 魅族 提交网址 乐视 提交网址 豌豆荚 提交 ...

随机推荐

  1. 深入理解android6.0 RunTime Permisstion

    了解下runtime permission 2015.8 google发布了android 6.0,sdk版本为23,一款"为工作升级而生"的android系统.如6.0新加入的指 ...

  2. android:padding和android:margin的区别 详解

    转载请说明博客地址:http://blog.csdn.net/qq_32059827/article/details/51487997 看了网上的类似博客,并没有给出确定的区别.现在具体分析一下pad ...

  3. 【shell脚本练习】grep sed awk

    下面是简单学习之后做得练习题,如果有不对的或者说解题思路不好的,请交流啊. Grep 练习 文件名grepfile Steve Blenheim:238-923-7366:95 Latham Lane ...

  4. Linux Shell -- 无网不利

    这篇文章中我介绍几个非常实用的和网络相关的命令 一.ifconfig 这个命令在Windows下被"翻译为ipconfig",它用于显示网络接口,子网掩码等详细信息. 注:在每个系 ...

  5. Swift基础之UITableView(之前写的知识点都是最新的2.2版本样式,欢迎大家参考,可以相互交流)

    //这里只是列举了经常使用的UITableView的属性和方法,其他的都可以类似使用,注意用法即可     //设置全局变量UITableView     var myTableView = UITa ...

  6. libevent之Reactor模式

    通过前边的一篇博文轻量级网络库libevent初探,我们知道libevent实际上是封装了不同操作系统下的/dev/poll.kqueue.event ports.select.poll和epoll事 ...

  7. 【65】Mybatis详解

    Mybatis介绍 MyBatis是一款一流的支持自定义SQL.存储过程和高级映射的持久化框架.MyBatis几乎消除了所有的JDBC代码,也基本不需要手工去设置参数和获取检索结果.MyBatis能够 ...

  8. 用LED灯和按键来模拟工业自动化设备的运动控制

    开场白: 前面三节讲了独立按键控制跑马灯的各种状态,这一节我们要做一个机械手控制程序,这个机械手可以左右移动,最左边有一个开关感应器,最右边也有一个开关感应器.它也可以上下移动,最下面有一个开关感应器 ...

  9. ExtJS:菜单ComboBox及级联菜单应用

    首页一级菜单查询分组,二级菜单查询分组中的车辆信息. 定义分组数据模型: Ext.define( 'group', { extend:'Ext.data.Model', fields:[ {name: ...

  10. SharePoint 搜索爬网第三方网站配置

    介绍:SharePoint的搜索着实强大,而且最近用到SharePoint搜索第三方爬网,感觉收获挺大,而且网上资料没找到太多类似的,就小记录一下,分享给大家. 首先,我自己写了一个net页面,里面读 ...