基本策略如下:
- 把上传文件保存到服务器,
- 传输服务器上的文件到OSSBucket,
- 获取上传文件的下载链接,
- 然后删除服务器上临时存储的文件
代码:
###工具类:
package cn.hcnet2006.blog.hcnetwebsite.util;
import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.CannedAccessControlList;
import com.aliyun.oss.model.CreateBucketRequest;
import com.aliyun.oss.model.PutObjectResult;
import org.springframework.beans.factory.annotation.Autowired;
import java.io.*;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* OSS文件上传
*/
public class OSSUtils {
@Autowired
//private static OSSConstant ossConstant;
static String bucketName = "hcnXXX-apk";
static String accessKeyId = "LTAI4FXXXXXXucSR5AX";
static String accessKeySecret = "yuYPXXXXXXX---lV0MBUaWjLdC";
static String endpoint = "oss-cn-shenzhen.aliyuncs.com";
private static OSS ossClient ;
private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
public static String upload(File file,String apkName){
ossClient = new OSSClientBuilder().build(endpoint,accessKeyId,
accessKeySecret);
System.out.println("accessKeyId2:"+accessKeyId);
if(file == null){
return null;
}
String dateStr = sdf.format(new Date());
try{
//容器不存在就创建
if(!ossClient.doesBucketExist(bucketName)){
ossClient.createBucket(bucketName);
CreateBucketRequest cbr = new
CreateBucketRequest(bucketName);
cbr.setCannedACL(
CannedAccessControlList.Private
);
ossClient.createBucket(cbr);
}
//上传文件
InputStream is = new FileInputStream(file);
PutObjectResult result = ossClient.putObject(bucketName,apkName,file);
//System.out.println(result.getRequestId());
// String uri = result.getResponse().getUri();
// 设置这个文件地址的有效时间
Date expiration = new Date(new Date().getTime() + 3600l * 1000 * 24 * 365 * 10);
//返回上传文件下载路径
String url = ossClient.generatePresignedUrl(bucketName, apkName, expiration).toString();
//去掉加密信息,因为已经开放了读权限
System.out.println("object:"+apkName+"存入成功");
System.out.println("上传路径:"+url);
url = url.substring(0,url.indexOf("?"));
return url;
}catch (OSSException oe){
oe.printStackTrace();
}catch (ClientException | FileNotFoundException ce){
ce.printStackTrace();
}finally{
ossClient.shutdown();
}
return null;
}
}
##Controller逻辑类
try{
//转义文件到服务器
uploadFile.transferTo(folder);
//从服务器获取文件传递到阿里云OSS.返回下载链接地址
String avator_url = OSSUtils.upload(folder,sysUser.getName()+".jpg");
//删除服务器缓存文件
folder.delete();