1. 程式人生 > >java接受安卓及ios App上傳的圖片,並保存到阿裏OSS

java接受安卓及ios App上傳的圖片,並保存到阿裏OSS

access servle 設置 string gets ont 圖片上傳 擴展名 summary

做後臺的時候,寫了兩個方法,分別用來獲取安卓和蘋果IOS端上傳的頭像,保存到阿裏雲OSS圖片存儲服務器上。(SMM框架)

安卓及H5版本:

技術分享圖片
 1  /**
 2      * 上傳用戶頭像
 3      */
 4     @RequestMapping("/uploadPhoto")
 5     public R uploadPhoto(@RequestParam("imgFile") MultipartFile imgFile, HttpServletRequest req) throws Exception {
 6         if (imgFile.isEmpty()) {
 7
throw new RRException("上傳文件不能為空"); 8 } 9 10 Integer uid = WebUtils.getUid(req); 11 WfMemberEntity member = memberService.queryObject(uid); 12 13 String newsUrl = ""; 14 if (!((MultipartFile) imgFile).isEmpty()) { 15 try
{ 16 newsUrl = OSSUtil.addFile(imgFile, "head", Constants.IGM_BUCKET); 17 18 } catch (IOException e) { 19 e.printStackTrace(); 20 } 21 }else { 22 return R.error("上傳圖片不可為空"); 23 } 24 if(member.getHeadimage() == null
) { 25 member.setHeadimage(newsUrl); 26 member.setThumbimg(newsUrl); 27 memberService.update(member); 28 }else { 29 // 刪除原來圖片 30 OSSUtil.delete(member.getHeadimage(), Constants.IGM_BUCKET); 31 member.setHeadimage(newsUrl); 32 member.setThumbimg(newsUrl); 33 memberService.update(member); 34 } 35 System.out.println("*************************************頭像路徑: "+newsUrl+"***************************************"); 36 return R.ok().put("url", newsUrl); 37 }
View Code

對應的蘋果圖片上傳版本:

技術分享圖片
 1  @RequestMapping("/iosUpload")  
 2    public R iosUpload(HttpServletRequest req){  
 3         
 4         Integer uid = WebUtils.getUid(req);
 5         WfMemberEntity member = memberService.queryObject(uid);
 6         
 7         String image = req.getParameter("image");
 8           // 將base64 轉 字節數組
 9         Base64 base = new Base64();
10         byte[] decode = base.decode(image);
11 
12         // 定義圖片輸入流
13         InputStream fin = new ByteArrayInputStream(decode);
14         
15         String newsUrl = "";
16         try {
17             newsUrl = OSSUtil.putFile(fin, "head", Constants.IGM_BUCKET);
18         } catch (IOException e) {
19             e.printStackTrace();
20         }
21         if(member.getHeadimage() == null) {
22              member.setHeadimage(newsUrl);
23              member.setThumbimg(newsUrl);
24              memberService.update(member);
25         }else {
26             // 刪除原來圖片
27             OSSUtil.delete(member.getHeadimage(), Constants.IGM_BUCKET);
28             member.setHeadimage(newsUrl);
29             member.setThumbimg(newsUrl);
30             memberService.update(member);
31         }
32         System.out.println("*************************************頭像路徑: "+newsUrl+"***************************************");
33         return R.ok().put("url", newsUrl);
34     }
View Code

對應的OSS上傳工具:

技術分享圖片
  1 package com.wfcm.utils;
  2 
  3 import java.io.File;
  4 import java.io.FileInputStream;
  5 import java.io.FileNotFoundException;
  6 import java.io.IOException;
  7 import java.io.InputStream;
  8 import java.util.ArrayList;
  9 import java.util.List;
 10 
 11 import org.springframework.web.multipart.MultipartFile;
 12 import org.springframework.web.multipart.commons.CommonsMultipartFile;
 13 
 14 import com.aliyun.oss.OSSClient;
 15 import com.aliyun.oss.model.ListObjectsRequest;
 16 import com.aliyun.oss.model.OSSObject;
 17 import com.aliyun.oss.model.OSSObjectSummary;
 18 import com.aliyun.oss.model.ObjectListing;
 19 import com.aliyun.oss.model.ObjectMetadata;
 20 import com.wfcm.utils.UUIDGenerator;
 21 
 22 
 23 /**
 24  * 阿裏雲分布式存儲工具類
 25  * @author lyinlong
 26  *
 27  */
 28 public class OSSUtil {
 29 
 30     //初始化client
 31     static OSSClient client = new OSSClient(Constants.OSS_ENDPOINT,Constants.OSS_ACCESS_ID, Constants.OSS_ACCESS_KEY);
 32 
 33     /**
 34      * 獲取指定文件夾下的文件列表
 35      * @param folderName 文件夾名稱(如果獲取當前所有, 空字符串)
 36      * @return 文件的所有key
 37      * @throws IOException
 38      */
 39     public static List<String> listBybucket(String bucketName ,String folderName) throws IOException{
 40         // 構造ListObjectsRequest請求
 41         ListObjectsRequest listObjectsRequest = new ListObjectsRequest(bucketName);
 42 
 43         // 遞歸列出fun目錄下的所有文件
 44         listObjectsRequest.setPrefix(folderName);
 45 
 46         ObjectListing listing = client.listObjects(listObjectsRequest);
 47 
 48         List<String> keys = new ArrayList<>();
 49 
 50         // 遍歷所有Object
 51         for (OSSObjectSummary objectSummary : listing.getObjectSummaries()) {
 52             keys.add(objectSummary.getKey());
 53         }
 54         return keys;
 55     }
 56 
 57     /**
 58      * 通過key獲取指定的Object
 59      * @param key
 60      * @return
 61      */
 62     public static InputStream getObject(String bucketName, String key){
 63         OSSObject object = client.getObject(bucketName, key);
 64         InputStream objectContent = object.getObjectContent();
 65 
 66         return objectContent;
 67     }
 68 
 69     /**
 70      * 添加一個文件到指定文件夾
 71      * @param file
 72      * @param folder
 73      * @return 該文件的Key(文件的唯一標識)
 74      * @throws FileNotFoundException
 75      */
 76     public static String putObject(File file , String folder , String bucketName) throws FileNotFoundException{
 77          // 獲取指定文件的輸入流
 78         InputStream content = new FileInputStream(file);
 79 
 80         // 創建上傳Object的Metadata
 81         ObjectMetadata meta = new ObjectMetadata();
 82 
 83         // 必須設置ContentLength
 84         meta.setContentLength(file.length());
 85 
 86         String uuid = UUIDGenerator.getUUID(false);
 87 
 88         client.putObject(bucketName, folder+"/"+uuid, content, meta);
 89 
 90         return uuid;
 91     }
 92 
 93     public static String putFile(InputStream content  , String folder , String bucketName) throws FileNotFoundException{
 94          // 獲取指定文件的輸入流
 95         //InputStream content = new FileInputStream(file);
 96 
 97         // 創建上傳Object的Metadata
 98         ObjectMetadata meta = new ObjectMetadata();
 99 
100         // 必須設置ContentLength
101         try {
102             meta.setContentLength(content.available());
103         } catch (IOException e) {
104             // TODO Auto-generated catch block
105             e.printStackTrace();
106         }
107 
108         String uuid = UUIDGenerator.getUUID(false);
109         client.putObject(bucketName, folder+"/"+uuid+".jpg", content, meta);
110 
111         return folder+"/"+uuid+".jpg";
112     }
113     
114     public static String addFile(Object file , String folder , String bucketName) throws IOException{
115          InputStream content  = null;
116          ObjectMetadata meta = null;
117          String  extension = "";
118         if(file!=null){
119             if(file instanceof CommonsMultipartFile){
120                 CommonsMultipartFile file1  = (CommonsMultipartFile)file;
121                 //文件擴展名
122                  String fileName = file1.getOriginalFilename();
123                  if(fileName.lastIndexOf(".")!=-1){
124                      extension = fileName.substring(fileName.lastIndexOf("."),fileName.length());
125                  }
126                  
127                 // 獲取指定文件的輸入流
128                   content =file1.getInputStream();
129                     // 創建上傳Object的Metadata
130                    meta = new ObjectMetadata();
131                     // 必須設置ContentLength
132                     meta.setContentLength(file1.getSize());
133                   // 設置content type  
134                     String strContentType = file1.getContentType();  
135                     meta.setContentType(strContentType);  
136             }
137             else if(file instanceof MultipartFile){
138                 MultipartFile    file2 = (MultipartFile)file;
139                  String fileName = file2.getOriginalFilename();
140                  if(fileName.lastIndexOf(".")!=-1){
141                      extension = fileName.substring(fileName.lastIndexOf("."),fileName.length());
142                  }
143                 // 獲取指定文件的輸入流
144                   content =file2.getInputStream();
145                     // 創建上傳Object的Metadata
146                    meta = new ObjectMetadata();
147                     // 必須設置ContentLength
148                     meta.setContentLength(file2.getSize());
149             }
150             else if(file instanceof File){
151                 File file3 = (File)file;
152                 //文件擴展名
153                  String fileName = file3.getName();
154                  if(fileName.lastIndexOf(".")!=-1){
155                      extension = fileName.substring(fileName.lastIndexOf("."),fileName.length());
156                  }
157                 
158                 // 獲取指定文件的輸入流
159                   content =new FileInputStream(file3);
160                     // 創建上傳Object的Metadata
161                   meta = new ObjectMetadata();
162                     // 必須設置ContentLength
163                   meta.setContentLength(file3.length());
164             }
165             else {
166                 return null;
167             }
168         }
169         String uuid = UUIDGenerator.getUUID(false);
170 
171         client.putObject(bucketName, folder+"/"+uuid+extension, content, meta);
172 
173         return folder+"/"+uuid+extension;
174     }
175     
176     /**
177      * 刪除指定的文件
178      * @param key
179      */
180     public static void delete(String key,String bucketName){
181 
182         client.deleteObject(bucketName, key);
183     }
184 
185     /**
186      * 新建文件桶
187      * @param bucketName
188      */
189     public static void createBucket(String bucketName){
190         client.createBucket(bucketName);
191     }
192 
193 }
View Code

java接受安卓及ios App上傳的圖片,並保存到阿裏OSS