阿里云 oss服务器文件上传 java
来源:互联网 发布:mac 涂鸦软件 编辑:程序博客网 时间:2024/05/17 06:04
前天做oss服务器文件上传,之前没了解过,做的过程中遇到许多问题,最终通过查阅相关资料解决了,特分享一下。
首先准备工作 必要的jar
这里注意版本一致,不然就会报很多坑爹的错误。。
如果你断点调试在执行putObject方法时报错,99%的是jar包有问题。。
然后是配置文件
现在开通oss,都是免费开通的,包年9块钱。
这是几个必要的参数,既然做这个肯定 要知道的!这里就不多做解释了。
这里,首先需要我们创建一个OSS信息实体类,OSSConfigure.Java,用来读取配置文件的信息,封装成实体。
import java.io.IOException;import java.io.InputStream;import java.util.Properties; /** * oss相关参数实体 * @author liux *2017/5/5 */public class OSSConfigure { private String endpoint; private String accessKeyId; private String accessKeySecret; private String bucketName; private String accessUrl; public OSSConfigure() { } /** * 通过配置文件.properties文件获取,这几项内容。 * * @param storageConfName * @throws IOException */ public OSSConfigure(String storageConfName) throws IOException { Properties prop = new Properties(); InputStream is= super.getClass().getClassLoader().getResourceAsStream(storageConfName); prop.load(is); endpoint = prop.getProperty("Endpoint").trim(); accessKeyId = prop.getProperty("AccessKey").trim(); accessKeySecret = prop.getProperty("AccessKeySecret").trim(); bucketName = prop.getProperty("BucketName").trim(); accessUrl = prop.getProperty("accessUrl").trim(); } public OSSConfigure(String endpoint, String accessKeyId, String accessKeySecret, String bucketName, String accessUrl) { this.endpoint = endpoint; this.accessKeyId = accessKeyId; this.accessKeySecret = accessKeySecret; this.bucketName = bucketName; this.accessUrl = accessUrl; } public String getEndpoint() { return endpoint; } public void setEndpoint(String endpoint) { this.endpoint = endpoint; } public String getAccessKeyId() { return accessKeyId; } public void setAccessKeyId(String accessKeyId) { this.accessKeyId = accessKeyId; } public String getAccessKeySecret() { return accessKeySecret; } public void setAccessKeySecret(String accessKeySecret) { this.accessKeySecret = accessKeySecret; } public String getBucketName() { return bucketName; } public void setBucketName(String bucketName) { this.bucketName = bucketName; } public String getAccessUrl() { return accessUrl; } public void setAccessUrl(String accessUrl) { this.accessUrl = accessUrl; } }
然后就是创建一个OSS文件管理的OSSManageUtil工具类。oss文件存储实际上就是对Object的操作,只要写好路径,都会自动创建的,OSSClient是oss的核心,有兴趣的可以多研究下。我做这个 是要上传app,以及压缩图片后上传,contentType这个方法注意,我上传的是apk 所以要用这个类型application/octet-stream,之前因为这个找了半天错。
import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.io.InputStream;import java.util.Date;import org.apache.commons.fileupload.disk.DiskFileItem;import org.springframework.web.multipart.MultipartFile;import org.springframework.web.multipart.commons.CommonsMultipartFile;import com.aliyun.oss.ClientException;import com.aliyun.oss.OSSClient;import com.aliyun.oss.OSSException;import com.aliyun.oss.model.GetObjectRequest;import com.aliyun.oss.model.OSSObject;import com.aliyun.oss.model.ObjectListing;import com.aliyun.oss.model.ObjectMetadata;import com.aliyun.oss.model.PutObjectResult;/** * 对OSS服务器进行上传删除等的处理 * * @ClassName: OSSManageUtil * @Description: * @author liux * @date 2017-5-3 上午10:47:00 * */public class OSSManageUtil {/** * 上传OSS服务器文件 @Title: uploadFile * @param multipartFile spring 上传的文件 * remotePath @param oss服务器二级目录 * @throws Exception 设定文件 @return String * 返回类型 返回oss存放路径 @throws */public static String uploadFile(MultipartFile multipartFile, String remotePath) throws Exception {// 流转换 将MultipartFile转换为oss所需的InputStreamCommonsMultipartFile cf = (CommonsMultipartFile) multipartFile;DiskFileItem fi = (DiskFileItem) cf.getFileItem();InputStream fileContent = fi.getInputStream();//获取文件名,对文件名做随机处理String fileName = fi.getName();fileName = "lxkc_" + new Date().getTime() + fileName.substring(fileName.lastIndexOf("."));// 加载配置文件,初始化OSSClientOSSConfigure ossConfigure = new OSSConfigure("/system.properties");OSSClient ossClient = new OSSClient(ossConfigure.getEndpoint(), ossConfigure.getAccessKeyId(),ossConfigure.getAccessKeySecret());// 定义二级目录String remoteFilePath = remotePath.substring(0, remotePath.length()).replaceAll("\\\\", "/") + "/";// 创建上传Object的MetadataObjectMetadata objectMetadata = new ObjectMetadata();objectMetadata.setContentLength(fileContent.available());objectMetadata.setContentEncoding("utf-8");objectMetadata.setCacheControl("no-cache");objectMetadata.setHeader("Pragma", "no-cache");objectMetadata.setContentType(contentType(fileName.substring(fileName.lastIndexOf("."))));objectMetadata.setContentDisposition("inline;filename=" + fileName);// 上传文件ossClient.putObject(ossConfigure.getBucketName(), remoteFilePath + fileName, fileContent, objectMetadata);// 关闭OSSClientossClient.shutdown();// 关闭io流fileContent.close();return ossConfigure.getAccessUrl() + "/" + remoteFilePath + fileName;}// 下载文件@SuppressWarnings("unused")public static void downloadFile(OSSConfigure ossConfigure, String key, String filename)throws OSSException, ClientException, IOException {// 初始化OSSClientOSSClient ossClient = new OSSClient(ossConfigure.getEndpoint(), ossConfigure.getAccessKeyId(),ossConfigure.getAccessKeySecret());OSSObject object = ossClient.getObject(ossConfigure.getBucketName(), key);// 获取ObjectMetaObjectMetadata meta = object.getObjectMetadata();// 获取Object的输入流InputStream objectContent = object.getObjectContent();ObjectMetadata objectData = ossClient.getObject(new GetObjectRequest(ossConfigure.getBucketName(), key),new File(filename));// 关闭数据流objectContent.close();}/** * 根据key删除OSS服务器上的文件 @Title: deleteFile @Description: @param @param * ossConfigure @param 配置文件实体 @param filePath 设定文件 @return void 返回类型 @throws */public static void deleteFile(OSSConfigure ossConfigure, String filePath) {OSSClient ossClient = new OSSClient(ossConfigure.getEndpoint(), ossConfigure.getAccessKeyId(),ossConfigure.getAccessKeySecret());ossClient.deleteObject(ossConfigure.getBucketName(), filePath);}/** * Description: 判断OSS服务文件上传时文件的contentType @Version1.0 * * @param FilenameExtension * 文件后缀 * @return String */public static String contentType(String FilenameExtension) {if (FilenameExtension.equals(".BMP") || FilenameExtension.equals(".bmp")) {return "image/bmp";}if (FilenameExtension.equals(".GIF") || FilenameExtension.equals(".gif")) {return "image/gif";}if (FilenameExtension.equals(".JPEG") || FilenameExtension.equals(".jpeg") || FilenameExtension.equals(".JPG")|| FilenameExtension.equals(".jpg") || FilenameExtension.equals(".PNG")|| FilenameExtension.equals(".png")) {return "image/jpeg";}if (FilenameExtension.equals(".HTML") || FilenameExtension.equals(".html")) {return "text/html";}if (FilenameExtension.equals(".TXT") || FilenameExtension.equals(".txt")) {return "text/plain";}if (FilenameExtension.equals(".VSD") || FilenameExtension.equals(".vsd")) {return "application/vnd.visio";}if (FilenameExtension.equals(".PPTX") || FilenameExtension.equals(".pptx") || FilenameExtension.equals(".PPT")|| FilenameExtension.equals(".ppt")) {return "application/vnd.ms-powerpoint";}if (FilenameExtension.equals(".DOCX") || FilenameExtension.equals(".docx") || FilenameExtension.equals(".DOC")|| FilenameExtension.equals(".doc")) {return "application/msword";}if (FilenameExtension.equals(".XML") || FilenameExtension.equals(".xml")) {return "text/xml";}if (FilenameExtension.equals(".apk") || FilenameExtension.equals(".APK")) {return "application/octet-stream";}return "text/html";}}
以上是主要代码,再贴一下我的controller,我这里是做的app文件上传
/** * app文件上传 * * @param imageFile * @param request * @return */@RequestMapping(value = "/uploadApp", method = RequestMethod.POST)@ResponseBodypublic ImportResponse uploadApp(@RequestParam("app") MultipartFile appFile, VersionUpgrade versionUpgrade) {if (versionUpgrade == null) {return ImportResponse.fail("上传失败!");}try { // 流转换 将MultipartFile转换为oss所需的InputStream CommonsMultipartFile cf = (CommonsMultipartFile) appFile; DiskFileItem fi = (DiskFileItem) cf.getFileItem(); InputStream fileContent = fi.getInputStream(); String fileName = fi.getName();String apkUrl = OSSManageUtil.uploadFile( fileContent, "xxapp",fileName);versionUpgrade.setApkUrl(apkUrl);versionUpgrade.setLoginUserVw(curUser);versionUpgradeManager.save(versionUpgrade);} catch (Exception e) {log.error("【app上传失败】 :", e);return ImportResponse.fail("上传失败!");}return ImportResponse.success("上传成功!");}
以上就是全部内容了,都是api里面有的,因为自己做的过程中出现很多问题,所以分享给大家!
2 0
- 阿里云 oss服务器文件上传 java
- Java图片文件上传阿里云OSS服务器
- java 上传文件到oss(阿里云)
- 阿里云OSS 上传文件
- 阿里云OSS 文件上传
- 阿里云oss服务器上传静态文件,图片
- 阿里oss文件上传
- 阿里云上传文件,下载文件 oss
- 文件上传-阿里云OSS-存储文件
- 整合阿里云OSS文件上传1
- 整合阿里云OSS文件上传2
- OSS阿里云文件上传 demo
- Jfinal版阿里云OSS文件上传
- 阿里云OSS上传文件工具类
- android 阿里云OSS文件上传
- 上传文件到阿里云OSS
- springboot上传文件到阿里云OSS
- 阿里云OSS通过URL上传文件
- iOS将一个viewcontroller的view加到self.view上
- Android NDK初次学习
- C# winform socket一个服务端和多个客户端进行通信
- C#自定义事件及使用(新手易懂)
- Mybatis的mapper标签 namespace属性说明
- 阿里云 oss服务器文件上传 java
- Tomcat8.0配置
- spring3详解及整合struts2
- 验证出错,错误码:230,请AndroidManifest.xml文件中检查 kye 设置
- R语言向量_向量化的ifelse()函数
- css3实现三角形
- LLVM学习笔记(11)
- Linux安装gcc编辑器教程
- 欢迎使用CSDN-markdown编辑器