package cn.hnthyy.thmz.Utils;

import org.springframework.util.ResourceUtils;
import org.springframework.web.multipart.MultipartFile;
import sun.misc.BASE64Decoder;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.util.Base64;


/**
 * 文件工具类 （根据浏览器不同将文本进行编码）
 */
public class FileUtils {
    /**
     * 下载文件时，针对不同浏览器，进行附件名的编码
     *
     * @param filename 下载文件名
     * @param agent    客户端浏览器
     * @return 编码后的下载附件名
     * @throws IOException
     */
    public static String encodeDownloadFilename(String filename, String agent)
            throws IOException {
        if (agent.contains("Firefox")) { // 火狐浏览器
            filename = "=?UTF-8?B?"
                    + Base64.getEncoder().encodeToString(filename.getBytes("utf-8"))
                    + "?=";
            filename = filename.replaceAll("\r\n", "");
        } else { // IE及其他浏览器
            filename = URLEncoder.encode(filename, "utf-8");
            filename = filename.replace("+", " ");
        }
        return filename;
    }

    /**
     * 保存文件
     *
     * @param file
     * @return
     * @throws Exception
     */
    public static String upload(MultipartFile file) throws Exception {
        // 生成新的文件名
        String realPath = ResourceUtils.getFile("classpath:images") + "\\tx.jpg";
        File tempFile = new File(realPath);
        if (tempFile.exists()) {
            tempFile.delete();
        }
        File dest = new File(realPath);
        // 判断文件父目录是否存在
        if (!dest.getParentFile().exists()) {
            dest.getParentFile().mkdir();
        }
        // 保存文件
        file.transferTo(dest);
        return dest.getName();
    }

    /**
     * 将Base64的图片保存下来
     * @param imgStr
     * @throws Exception
     */
    public static void generateImage(String imgStr) throws Exception {
        if (imgStr == null) // 图像数据为空
            return;
        OutputStream out =null;
        try {
            BASE64Decoder decoder = new BASE64Decoder();
            // Base64解码,对字节数组字符串进行Base64解码并生成图片
            imgStr = imgStr.replaceAll(" ", "+");
            byte[] b = decoder.decodeBuffer(imgStr.replace("data:image/jpeg;base64,", ""));
            for (int i = 0; i < b.length; ++i) {
                if (b[i] < 0) {// 调整异常数据
                    b[i] += 256;
                }
            }
            String realPath = ResourceUtils.getFile("classpath:images") + "\\tx.jpg";
            out = new FileOutputStream(realPath);
            out.write(b);
            out.flush();
        } catch (Exception e) {

        } finally {
            if(out!=null){
                out.close();
            }
        }

    }
}
