阿里云OSS配置
1、首先购买阿里云OSS服务。
地址:阿里云OSS
2、购买之后进入控制台,创建一个Bucket


3、打开创建好的Bucket,如图所示

4、创建AccessKey

创建阿里云OSS上传工具类
1、参数配置接口
附:在我的毕设项目中的位置:xiaoyou3\xiaoyou_tools\src\main\java\com\lgy\tools\common\utils中的AliyunOSSConfigConstant接口
public interface AliyunOSSConfigConstant {
/**
* 仓库名称
*/
String BUCKET_NAME = "你的oss名称";
/**
* 地域节点
*/
String END_POINT = "oss-cn-beijing.aliyuncs.com";//例如
/**
* AccessKey ID
*/
String AccessKey_ID = "你创建好的AccessKey ID";
/**
* Access Key Secret
*/
String AccessKey_Secret = "你创建好的Access Key Secret";
/**
* 子目录文件夹
*/
String FILE_HOST = "如果有子目录则指定";
}
附:到此在我的毕设项目中已经配置完成,如果想要了解阿里云OSS的使用,可以继续往下看。
2、工具类配置
public class AliyunOSSUtil implements AliyunOSSConfigConstant {
private static final org.slf4j.Logger logger = LoggerFactory.getLogger(AliyunOSSUtil.class);
private static String FILE_URL;
private static String bucketName = AliyunOSSConfigConstant.BUCKET_NAME;
private static String endpoint = AliyunOSSConfigConstant.END_POINT;
private static String accessKeyId = AliyunOSSConfigConstant.AccessKey_ID;
private static String accessKeySecret = AliyunOSSConfigConstant.AccessKey_Secret;
private static String fileHost = AliyunOSSConfigConstant.FILE_HOST;
/**
* 上传文件。
*
* @param file 需要上传的文件路径
* @return 如果上传的文件是图片的话,会返回图片的"URL",如果非图片的话会返回"非图片,不可预览。文件路径为:+文件路径"
*/
public static String upLoad(File file) {
// 默认值为:true
boolean isImage = true;
// 判断所要上传的图片是否是图片,图片可以预览,其他文件不提供通过URL预览
try {
Image image = ImageIO.read(file);
isImage = image == null ? false : true;
} catch (IOException e) {
e.printStackTrace();
}
logger.info("------OSS文件上传开始--------" + file.getName());
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
String dateStr = format.format(new Date());
// 判断文件
if (file == null) {
return null;
}
// 创建OSSClient实例。
OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
try {
// 判断容器是否存在,不存在就创建
if (!ossClient.doesBucketExist(bucketName)) {
ossClient.createBucket(bucketName);
CreateBucketRequest createBucketRequest = new CreateBucketRequest(bucketName);
createBucketRequest.setCannedACL(CannedAccessControlList.PublicRead);
ossClient.createBucket(createBucketRequest);
}
// 设置文件路径和名称
String fileUrl = fileHost + "/" + (dateStr + "/" + UUID.randomUUID().toString().replace("-", "") + "-" + file.getName());
//如果是图片,则图片的URL为:....
if (isImage) {
FILE_URL = "https://" + bucketName + "." + endpoint + "/" + fileUrl;
} else {
FILE_URL = "非图片,不可预览。文件路径为:" + fileUrl;
}
// 上传文件
PutObjectResult result = ossClient.putObject(new PutObjectRequest(bucketName, fileUrl, file));
// 设置权限(公开读)
ossClient.setBucketAcl(bucketName, CannedAccessControlList.PublicRead);
if (result != null) {
logger.info("------OSS文件上传成功------" + fileUrl);
}
} catch (OSSException oe) {
logger.error(oe.getMessage());
} catch (ClientException ce) {
logger.error(ce.getErrorMessage());
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
return FILE_URL;
}
}
后台文件上传示例
附:单文件和多文件都可以使用此方法
@RequestMapping("/uploadNewsImg")
@ResponseBody
public Map<String,Object> uploadNewsImg(@RequestParam("imgFile") List<MultipartFile> imgFiles){
//创建一个Map用于响应状态码和url
Map<String, Object> map = new HashMap<>();
//创建一个url集合
List<String> data = new ArrayList<>();
for (MultipartFile imgFile : imgFiles) {
String filename = imgFile.getOriginalFilename();
System.out.println(filename);
try {
if (imgFile != null) {
if (!"".equals(filename.trim())) {
File newFile = new File(filename);
FileOutputStream os = new FileOutputStream(newFile);
os.write(imgFile.getBytes());
os.close();
imgFile.transferTo(newFile);
// 上传到OSS
String uploadUrl = AliyunOSSUtil.upLoad(newFile);
//删除临时文件
newFile.delete();
//添加到url集合中
data.add(uploadUrl);
}
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
//错误码,0为正确
map.put("error",0);
map.put("data",data);
return map;
}