thymeleaf a标签的onclick属性触发事件 springboot整合oss实现点击下载OSS文件到本地

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;
    }

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值