1.页面
<!--target="_self" 不跳转至其他页面 本页面打开-->
<a href="javascript:void(0)" th:data-id="${ossFile.uuid}" onclick="toDownload(this.getAttribute('data-id'))"
target="_self" th:title="${ossFile.fileName}" th:text="${ossFile.fileName}">
</a>
layui.use('layer', function(){
var layer = layui.layer;
});
function toDownload(uuid) {
$.ajax({
type:"post",
url:"/ossFile/"+uuid,
dataType:"json", //预期服务器返回数据的类型
async: false, //ajax默认是以异步的方式访问获取数据,这样返回来的数据只能在callback里使用,
// 要在外面使用,应该将ajax设置为同步,async值设置为false
success: function(result){
if(result.success){
location.href=result.downloadUrl;
location.reload();
layer.msg('success')
}else{
alert(result.msg);
}
},
error:function(jqXHR){
alert("发生错误:"+ jqXHR.status);
}
});
}
2.后台
/** 获取下载地址
* @param uuid
* @return
*/
@RequestMapping("/{uuid}")
public Map<String,Object> view(@PathVariable("uuid") String uuid){
OSSFile ossFile=ossFileService.findByUUID(uuid);
Map<String,Object> retMap = new HashMap<>();
retMap.put("success",false);
retMap.put("msg","下载地址获取失败");
try {
String downloadUrl = AliyunOSSUtil.fileDownload(ossFile);
//下载次数+1
ossFile.setDownloads(ossFile.getDownloads()+1);
ossFileService.saveFileInfo(ossFile);
retMap.put("downloadUrl",downloadUrl);
retMap.put("success",true);
retMap.put("msg","下载地址获取成功");
} catch (Exception e) {
e.printStackTrace();
}
return retMap;
}
/**
* OSS文件下载 下载地址
* @param ossFile OSS文件
*/
public static String fileDownload(OSSFile ossFile) {
// 创建OSSClient实例
OSSClient ossClient = createOSSClient();
Date expiration = new Date(new Date().getTime() + 3600l * 1000 * 24 );// url过期时间为1天
String url = ossClient.generatePresignedUrl(ossFile.getBucketName(),ossFile.getUrlSuffix(),expiration).toString();
// 关闭client
ossClient.shutdown();
return url;
}
// 创建OSS连接
public static OSSClient createOSSClient(){
String endpoint=ConstantProperties.JAVA4ALL_END_POINT;
String accessKeyId=ConstantProperties.JAVA4ALL_ACCESS_KEY_ID;
String accessKeySecret=ConstantProperties.JAVA4ALL_ACCESS_KEY_SECRET;
ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
return ossClient;
}
/**
* @Description: 配置文件配置项
* 读取配置文件application.properties中的配置,定义为常量,方便使用
* @Author: tony
* @Date: 2019/12/8 13:15
**/
@Component
public class ConstantProperties implements InitializingBean {
@Value("${java4all.file.endpoint}")
private String java4all_file_endpoint;
@Value("${java4all.file.keyid}")
private String java4all_file_keyid;
@Value("${java4all.file.keysecret}")
private String java4all_file_keysecret;
@Value("${java4all.file.filehost}") //上传至OSS自己建的哪个文件夹
private String java4all_file_filehost;
@Value("${java4all.file.bucketname1}")
private String java4all_file_bucketname1; //自己创建bucket时的命名
@Value("${java4all.file.urlPrefix}")
private String java4all_file_url_prefix; //文件下载路径前缀 后面若再加上文件名称即是文件下载路径了
public static String JAVA4ALL_END_POINT ;
public static String JAVA4ALL_ACCESS_KEY_ID ;
public static String JAVA4ALL_ACCESS_KEY_SECRET ;
public static String JAVA4ALL_BUCKET_NAME1 ;
public static String JAVA4ALL_FILE_HOST ;
public static String JAVA4ALL_FILE_URL_PREFIX ;
// 赋值
@Override
public void afterPropertiesSet() throws Exception {
JAVA4ALL_END_POINT = java4all_file_endpoint;
JAVA4ALL_ACCESS_KEY_ID = java4all_file_keyid;
JAVA4ALL_ACCESS_KEY_SECRET = java4all_file_keysecret;
JAVA4ALL_FILE_HOST = java4all_file_filehost;
JAVA4ALL_BUCKET_NAME1 = java4all_file_bucketname1;
JAVA4ALL_FILE_URL_PREFIX = java4all_file_url_prefix;
}
}
版权声明:本文为qq_37767455原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。