package com.ruoyi.web.controller.common;

import com.ruoyi.common.annotation.Anonymous;
import com.ruoyi.common.config.RuoYiConfig;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.file.FileUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletResponse;
import java.io.File;

/**
 * 头像下载
 */
@RestController
@Anonymous
//@Slf4j
public class DownloadAvatarController {
    private static final Logger log = LoggerFactory.getLogger(DownloadAvatarController.class);

    @Value("${ruoyi.profile}")
    public String url;

    /**
     * 头像下载测试中
     */
    @GetMapping("/avatar/{path1}/{path2}/{path3}/{path4}")
    public void resourceDownload(@PathVariable("path1") String path1, @PathVariable("path2") String path2, @PathVariable("path3") String path3, @PathVariable("path4") String path4, HttpServletResponse response) throws Exception {
//        String resource = "\\avatar\\2024\\03\\22\\路飞1_20240322085547A001.jpg";

        String resource = File.separator + path1 + File.separator + path2 + File.separator + path3 + File.separator + path4;
        try {
            if (!FileUtils.checkAllowDownload(resource)) {
                throw new Exception(StringUtils.format("资源文件({})非法，不允许下载。 ", resource));
            }
            // 本地资源路径
//            String localPath = RuoYiConfig.getProfile();
            String localPath = RuoYiConfig.getAvatarPath();
            // 数据库资源地址
            String downloadPath = localPath + resource;
            log.info("【头像】-下载：磁盘路径 {}", downloadPath);
            // 下载名称
            String downloadName = StringUtils.substringAfterLast(downloadPath, "/");
            response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
            FileUtils.setAttachmentResponseHeader(response, downloadName);
            FileUtils.writeBytes(downloadPath, response.getOutputStream());
        } catch (Exception e) {
            log.error("下载文件失败", e);
        }
    }
}
