一,实现文件上传(图片,文件,音视频)
普通的上传
@Override
public Object uploadImage(MultipartFile file) {
//获取文件名
String originalFilename = file.getOriginalFilename();
//获取文件后缀名
String substring = originalFilename.substring(originalFilename.lastIndexOf(".") + 1);
System.out.println(substring);
//使用时间戳改变文件名
String fileName = System.currentTimeMillis()+"."+substring;
String filePath = "E:\\data\\";
String fileUrl = filePath+fileName;
File dest = new File(fileUrl);
//判断是否存在此目录,不存在则创建此目录
if (!dest.getParentFile().exists()){
dest.getParentFile().mkdirs();
}
try {
file.transferTo(dest);
}catch (Exception e){
e.printStackTrace();
return CommonResult.failed(originalFilename+"上传失败!");
}
return CommonResult.success("上传成功! "+fileUrl);
}
二,文件上传到OSS服务器
需要引入的依赖
<!--OSS-->
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>2.4.0</version>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>org.jdom</groupId>
<artifactId>jdom</artifactId>
<version>1.1.3</version>
</dependency>
具体的代码,不包含业务逻辑
@Override
public Object uploadImageOss(MultipartFile file) throws Exception {
// Endpoint以北京为例,其它Region请按实际情况填写。
String endpoint = "http://oss-cn-beijing.aliyuncs.com";
// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
String accessKeyId = "xxxxxxxx";
String accessKeySecret = "xxxxxxx";
//创建的bucket名
String bucketName = "xxxxxx";
//获取文件名
String originalFilename = file.getOriginalFilename();
//获取文件后缀名
String substring = originalFilename.substring(originalFilename.lastIndexOf(".") + 1);
//使用uuid作为文件名防止重复
String uuid = UUID.randomUUID().toString().replaceAll("-", "");
String fileName = uuid+"."+substring;
final File tempFile = File.createTempFile(uuid, substring);
//MultipartFile 转换为 File
file.transferTo(tempFile);
// 创建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 fileHost = "upload";
//上传文件
//File file1 = multipartFileToFile(file);
//创建文件路径
String fileUrl= fileHost+"/"+fileName;
PutObjectResult result = ossClient.putObject(new PutObjectRequest(bucketName, fileUrl, tempFile));
//设置权限 这里是公开读
ossClient.setBucketAcl(bucketName,CannedAccessControlList.PublicRead);
if(null != result){
log.info("==========>OSS文件上传成功,OSS地址:"+fileUrl);
return CommonResult.success(fileUrl);
}
}catch (OSSException oe){
log.error(oe.getMessage());
}catch (ClientException ce){
log.error(ce.getMessage());
} catch (Exception e) {
e.printStackTrace();
} finally {
//关闭
ossClient.shutdown();
}
//删除临时生成的文件
deleteFile(tempFile);
return null;
}
/**
* 删除
*
* @param files
*/
private void deleteFile(File... files) {
for (File file : files) {
if (file.exists()) {
file.delete();
}
}
}