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

}

发布了98 篇原创文章 · 获赞 7 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_37767455/article/details/103497908