最近项目中需要通过OSS来实现文件的上传和下载,特此记录,以便日后查阅。
首先你需要开通阿里云的OSS服务,注册得到相关的配置信息:endPoint、accessKeyId、accessKeySecret、bucketName。
1、锲子
一、如何获取accessKey:
1、登录阿里云控制台 。
2、将鼠标放在右上方的用户名区域,在弹出的快捷菜单中选择accesskeys。
3、系统弹出安全提示对话框,单击继续使用AccessKey。页面显示AccessKeyId和AccessKeySecret。
二、新手常犯错误:无法获取返回的路径无法下载解决方法
1、bucket没有开放权限
2、文件上传没有开放权限
2、引入依赖
<!-- OSS SDK 相关依赖 -->
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.6.0</version>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.2</version>
</dependency>
3、代码实现
import com.aliyun.oss.OSSClient;
import org.apache.commons.io.FilenameUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.multipart.MultipartFile;
import java.util.ResourceBundle;
import java.util.UUID;
public class Aliyunoss {
private String ENDPOINT = "endPoint";//你自己的endPoint
private String BUCKET = "https://oss-cn-shenzhen.aliyuncs.com/";//shenzhen:认准自己的定位,是深圳,还是张家界之类的地方
private String BUCKEY_NAME = "bucketName";//你自己的bucketName
private String ACCESSKEYID = "accessKeyId";//你自己的accessKeyId
private String ACCESSKEYSECRET = "accessKeySecret";//你自己的accessKeySecret
// public static void main(String[] args) throws Exception {
// //上传
// File file = new File("D:\\file\\text\\001.txt");
// FileItem fileItem = getMultipartFile(file,"templFileItem");
// MultipartFile multipartFile = new CommonsMultipartFile(fileItem);
// String str = uploadAli(multipartFile);
// }
/**
* 保存文件进入阿里云的OSS
*
* @param file 上传的文件
* @return
* @throws Exception
*/
public String uploadAli(MultipartFile file, String folder) throws Exception {
//生成文件名称
String uuid = UUID.randomUUID().toString();
String orgFileName = file.getOriginalFilename();//获取真实文件名称 xxx.jpg
String ext = "." + FilenameUtils.getExtension(orgFileName);//获取拓展名字.jpg
String fileName = folder + uuid + ext;//xxxxxsfsasa.jpg
// 云账号AccessKey有所有API访问权限,建议遵循阿里云安全最佳实践,创建并使用RAM子账号进行API访问或日常运维,
// 请登录 https://ram.console.aliyun.com 创建。
String accessKeyId = ACCESSKEYID;
String accessKeySecret = ACCESSKEYSECRET;
// 创建OSSClient实例。
OSSClient ossClient = new OSSClient(BUCKET, accessKeyId, accessKeySecret);
// 上传文件流。
ossClient.putObject(BUCKEY_NAME, fileName, file.getInputStream());
// 关闭OSSClient。
ossClient.shutdown();
return ENDPOINT + fileName;
}
// /**
// * 将file转换成fileItem
// *
// * @param file
// * @param fieldName
// * @return
// */
// public static FileItem getMultipartFile(File file, String fieldName) {
// FileItemFactory factory = new DiskFileItemFactory(16, null);
// FileItem item = factory.createItem(fieldName, "text/plain", true, file.getName());
// int bytesRead = 0;
// byte[] buffer = new byte[8192];
// try {
// FileInputStream fis = new FileInputStream(file);
// OutputStream os = item.getOutputStream();
// while ((bytesRead = fis.read(buffer, 0, 8192)) != -1) {
// os.write(buffer, 0, bytesRead);
// }
// os.close();
// fis.close();
// } catch (IOException e) {
// e.printStackTrace();
// }
// return item;
// }
}