java -oss 文件上传 阿里云 oss服务器文件上传 java

阿里云 oss服务器文件上传 java

前天做oss服务器文件上传,之前没了解过,做的过程中遇到许多问题,最终通过查阅相关资料解决了,特分享一下。

首先准备工作 必要的jar 


这里注意版本一致,不然就会报很多坑爹的错误。。

如果你断点调试在执行putObject方法时报错,99%的是jar包有问题。。

然后是配置文件


现在开通oss,都是免费开通的,包年9块钱。

这是几个必要的参数,既然做这个肯定 要知道的!这里就不多做解释了。

这里,首先需要我们创建一个OSS信息实体类,OSSConfigure.Java,用来读取配置文件的信息,封装成实体。

[java]  view plain  copy
  1. import java.io.IOException;  
  2. import java.io.InputStream;  
  3. import java.util.Properties;    
  4.   /** 
  5.    * oss相关参数实体 
  6.    * @author liux 
  7.    *2017/5/5 
  8.    */  
  9. public class OSSConfigure {    
  10.     
  11.     private String endpoint;    
  12.     private String accessKeyId;    
  13.     private String accessKeySecret;    
  14.     private String bucketName;    
  15.     private String accessUrl;    
  16.     
  17.     public OSSConfigure() {    
  18.     
  19.     }    
  20.     
  21.     /**  
  22.      * 通过配置文件.properties文件获取,这几项内容。  
  23.      *   
  24.      * @param storageConfName  
  25.      * @throws IOException  
  26.      */    
  27.     public OSSConfigure(String storageConfName) throws IOException {    
  28.     
  29.         Properties prop = new Properties();   
  30.         InputStream is= super.getClass().getClassLoader().getResourceAsStream(storageConfName);  
  31.         prop.load(is);    
  32.     
  33.         endpoint = prop.getProperty("Endpoint").trim();    
  34.         accessKeyId = prop.getProperty("AccessKey").trim();    
  35.         accessKeySecret = prop.getProperty("AccessKeySecret").trim();    
  36.         bucketName = prop.getProperty("BucketName").trim();    
  37.         accessUrl = prop.getProperty("accessUrl").trim();    
  38.     
  39.     }    
  40.     
  41.     public OSSConfigure(String endpoint, String accessKeyId,    
  42.             String accessKeySecret, String bucketName, String accessUrl) {    
  43.     
  44.         this.endpoint = endpoint;    
  45.         this.accessKeyId = accessKeyId;    
  46.         this.accessKeySecret = accessKeySecret;    
  47.         this.bucketName = bucketName;    
  48.         this.accessUrl = accessUrl;    
  49.     }    
  50.     
  51.     public String getEndpoint() {    
  52.         return endpoint;    
  53.     }    
  54.     
  55.     public void setEndpoint(String endpoint) {    
  56.         this.endpoint = endpoint;    
  57.     }    
  58.     
  59.     public String getAccessKeyId() {    
  60.         return accessKeyId;    
  61.     }    
  62.     
  63.     public void setAccessKeyId(String accessKeyId) {    
  64.         this.accessKeyId = accessKeyId;    
  65.     }    
  66.     
  67.     public String getAccessKeySecret() {    
  68.         return accessKeySecret;    
  69.     }    
  70.     
  71.     public void setAccessKeySecret(String accessKeySecret) {    
  72.         this.accessKeySecret = accessKeySecret;    
  73.     }    
  74.     
  75.     public String getBucketName() {    
  76.         return bucketName;    
  77.     }    
  78.     
  79.     public void setBucketName(String bucketName) {    
  80.         this.bucketName = bucketName;    
  81.     }    
  82.     
  83.     public String getAccessUrl() {    
  84.         return accessUrl;    
  85.     }    
  86.     
  87.     public void setAccessUrl(String accessUrl) {    
  88.         this.accessUrl = accessUrl;    
  89.     }    
  90.     
  91. }    


然后就是创建一个OSS文件管理的OSSManageUtil工具类。oss文件存储实际上就是对Object的操作,只要写好路径,都会自动创建的,OSSClient是oss的核心,有兴趣的可以多研究下。我做这个 是要上传app,以及压缩图片后上传,contentType这个方法注意,我上传的是apk  所以要用这个类型application/octet-stream,之前因为这个找了半天错。

[java]  view plain  copy
  1. package com.cdy.utils;  
  2.   
  3. import java.io.File;  
  4. import java.io.IOException;  
  5. import java.io.InputStream;  
  6. import java.util.Date;  
  7.   
  8.   
  9. import com.aliyun.oss.ClientException;  
  10. import com.aliyun.oss.OSSClient;  
  11. import com.aliyun.oss.OSSException;  
  12. import com.aliyun.oss.model.GetObjectRequest;  
  13. import com.aliyun.oss.model.OSSObject;  
  14. import com.aliyun.oss.model.ObjectMetadata;  
  15.   
  16. /** 
  17.  * 对OSS服务器进行上传删除等的处理 
  18.  *  
  19.  * @ClassName: OSSManageUtil 
  20.  * @Description: 
  21.  * @author liux 
  22.  * @date 2017-5-3 上午10:47:00 
  23.  *  
  24.  */  
  25. public class OSSManageUtil {  
  26.     /** 
  27.      * 上传OSS服务器文件 @Title: uploadFile  
  28.      *  @param multipartFile spring 上传的文件 
  29.      * remotePath @param oss服务器二级目录 
  30.      *  @throws Exception 设定文件 @return String 
  31.      * 返回类型 @throws 
  32.      */  
  33.     public static String uploadFile(InputStream fileContent, String remotePath,String fileName) throws Exception {  
  34.         //随机名处理  
  35.         fileName = "lxkc_" + new Date().getTime() + fileName.substring(fileName.lastIndexOf("."));  
  36.         // 加载配置文件,初始化OSSClient  
  37.         OSSConfigure ossConfigure = new OSSConfigure("/system.properties");  
  38.         OSSClient ossClient = new OSSClient(ossConfigure.getEndpoint(), ossConfigure.getAccessKeyId(),  
  39.                 ossConfigure.getAccessKeySecret());  
  40.         // 定义二级目录  
  41.         String remoteFilePath = remotePath.substring(0, remotePath.length()).replaceAll("\\\\", "/") + "/";  
  42.         // 创建上传Object的Metadata  
  43.         ObjectMetadata objectMetadata = new ObjectMetadata();  
  44.         objectMetadata.setContentLength(fileContent.available());  
  45.         objectMetadata.setContentEncoding("utf-8");  
  46.         objectMetadata.setCacheControl("no-cache");  
  47.         objectMetadata.setHeader("Pragma""no-cache");  
  48.         objectMetadata.setContentType(contentType(fileName.substring(fileName.lastIndexOf("."))));  
  49.         objectMetadata.setContentDisposition("inline;filename=" + fileName);  
  50.         // 上传文件  
  51.         ossClient.putObject(ossConfigure.getBucketName(), remoteFilePath + fileName, fileContent, objectMetadata);  
  52.         // 关闭OSSClient  
  53.         ossClient.shutdown();  
  54.         // 关闭io流  
  55.         fileContent.close();  
  56.         return ossConfigure.getAccessUrl() + "/" + remoteFilePath + fileName;  
  57.     }  
  58.   
  59.     // 下载文件  
  60.     @SuppressWarnings("unused")  
  61.     public static void downloadFile(OSSConfigure ossConfigure, String key, String filename)  
  62.             throws OSSException, ClientException, IOException {  
  63.         // 初始化OSSClient  
  64.         OSSClient ossClient = new OSSClient(ossConfigure.getEndpoint(), ossConfigure.getAccessKeyId(),  
  65.                 ossConfigure.getAccessKeySecret());  
  66.         OSSObject object = ossClient.getObject(ossConfigure.getBucketName(), key);  
  67.         // 获取ObjectMeta  
  68.         ObjectMetadata meta = object.getObjectMetadata();  
  69.   
  70.         // 获取Object的输入流  
  71.         InputStream objectContent = object.getObjectContent();  
  72.   
  73.         ObjectMetadata objectData = ossClient.getObject(new GetObjectRequest(ossConfigure.getBucketName(), key),  
  74.                 new File(filename));  
  75.         // 关闭数据流  
  76.         objectContent.close();  
  77.   
  78.     }  
  79.   
  80.     /** 
  81.      * 根据key删除OSS服务器上的文件 @Title: deleteFile @Description: @param @param 
  82.      * ossConfigure @param @param filePath 设定文件 @return void 返回类型 @throws 
  83.      * @throws IOException  
  84.      */  
  85.     public static void deleteFile( String filePath) throws IOException {  
  86.         // 加载配置文件,初始化OSSClient  
  87.         OSSConfigure ossConfigure = new OSSConfigure("/system.properties");  
  88.         OSSClient ossClient = new OSSClient(ossConfigure.getEndpoint(), ossConfigure.getAccessKeyId(),  
  89.                 ossConfigure.getAccessKeySecret());  
  90.         filePath=filePath.substring(45);  
  91.         ossClient.deleteObject(ossConfigure.getBucketName(), filePath);  
  92.   
  93.     }  
  94.   
  95.     /** 
  96.      * Description: 判断OSS服务文件上传时文件的contentType @Version1.0 
  97.      *  
  98.      * @param FilenameExtension 
  99.      *            文件后缀 
  100.      * @return String 
  101.      */  
  102.     public static String contentType(String FilenameExtension) {  
  103.         if (FilenameExtension.equals(".BMP") || FilenameExtension.equals(".bmp")) {  
  104.             return "image/bmp";  
  105.         }  
  106.         if (FilenameExtension.equals(".GIF") || FilenameExtension.equals(".gif")) {  
  107.             return "image/gif";  
  108.         }  
  109.         if (FilenameExtension.equals(".JPEG") || FilenameExtension.equals(".jpeg") || FilenameExtension.equals(".JPG")  
  110.                 || FilenameExtension.equals(".jpg") || FilenameExtension.equals(".PNG")  
  111.                 || FilenameExtension.equals(".png")) {  
  112.             return "image/jpeg";  
  113.         }  
  114.         if (FilenameExtension.equals(".HTML") || FilenameExtension.equals(".html")) {  
  115.             return "text/html";  
  116.         }  
  117.         if (FilenameExtension.equals(".TXT") || FilenameExtension.equals(".txt")) {  
  118.             return "text/plain";  
  119.         }  
  120.         if (FilenameExtension.equals(".VSD") || FilenameExtension.equals(".vsd")) {  
  121.             return "application/vnd.visio";  
  122.         }  
  123.         if (FilenameExtension.equals(".PPTX") || FilenameExtension.equals(".pptx") || FilenameExtension.equals(".PPT")  
  124.                 || FilenameExtension.equals(".ppt")) {  
  125.             return "application/vnd.ms-powerpoint";  
  126.         }  
  127.         if (FilenameExtension.equals(".DOCX") || FilenameExtension.equals(".docx") || FilenameExtension.equals(".DOC")  
  128.                 || FilenameExtension.equals(".doc")) {  
  129.             return "application/msword";  
  130.         }  
  131.         if (FilenameExtension.equals(".XML") || FilenameExtension.equals(".xml")) {  
  132.             return "text/xml";  
  133.         }  
  134.         if (FilenameExtension.equals(".apk") || FilenameExtension.equals(".APK")) {  
  135.             return "application/octet-stream";  
  136.         }  
  137.         return "text/html";  
  138.     }  
  139. }  

以上是主要代码,再贴一下我的controller,我这里是做的app文件上传


[java]  view plain  copy
  1. /** 
  2.      * app文件上传 
  3.      * 
  4.      * @param imageFile 
  5.      * @param request 
  6.      * @return 
  7.      */  
  8.     @RequestMapping(value = "/uploadApp", method = RequestMethod.POST)  
  9.     @ResponseBody  
  10.     public ImportResponse uploadApp(@RequestParam("app") MultipartFile appFile, VersionUpgrade versionUpgrade) {  
  11.         if (versionUpgrade == null) {  
  12.             return ImportResponse.fail("上传失败!");  
  13.         }  
  14.         try {  
  15.              // 流转换 将MultipartFile转换为oss所需的InputStream  
  16.             CommonsMultipartFile cf = (CommonsMultipartFile) appFile;  
  17.             DiskFileItem fi = (DiskFileItem) cf.getFileItem();  
  18.             InputStream fileContent = fi.getInputStream();  
  19.             String fileName = fi.getName();  
  20.             String apkUrl = OSSManageUtil.uploadFile( fileContent, "xxapp",fileName);  
  21.             versionUpgrade.setApkUrl(apkUrl);  
  22.             versionUpgrade.setLoginUserVw(curUser);  
  23.             versionUpgradeManager.save(versionUpgrade);  
  24.         } catch (Exception e) {  
  25.             log.error("【app上传失败】 :", e);  
  26.             return ImportResponse.fail("上传失败!");  
  27.         }  
  28.         return ImportResponse.success("上传成功!");  
  29.     }  
 sdk 文https://www.alibabacloud.com/help/zh/doc-detail/32008.htm?spm=a2c63.p38356.b99.119.4ebb4f7cTwRFnY
以上就是全部内容了,都是api里面有的,因为自己做的过程中出现很多问题,所以分享给大家!

猜你喜欢

转载自blog.csdn.net/qq_27469747/article/details/80500485
今日推荐