package com.ruoyi.system.util;

import org.springframework.web.multipart.MultipartFile;

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

/**
 * 文件上传下载接口定义
 *
 * @author 陈沅
 */
public interface IFileUtil {



    /**
     * 从http请求上传文件
     *
     * @param file form传参http文件对象
     * @return 返回文件在服务器上保存的相对路径
     */
    String upload(MultipartFile file);

    /**
     * 根据文件流上传文件
     *
     * @param objectName 指定文件名（带扩展名）
     * @param fileIn     文件流
     * @return 返回文件在服务器上保存的相对路径
     */
    String upload(String objectName, InputStream fileIn);

    /**
     * 删除服务器上的一个文件
     *
     * @param path 文件在服务器上保存的相对路径
     * @return 返回true则表示删除成功
     */
    boolean remove(String path);

    /**
     * 下载文件流，指定文件名
     *
     * @param response
     * @param fileName 指定下载文件名称
     * @param filePath 文件保存的相对路径
     */
    void download(HttpServletResponse response, String fileName, String filePath);

    /**
     * 下载文件流，不指定文件名
     *
     * @param response
     * @param filePath 文件保存的相对路径
     */
    void download(HttpServletResponse response, String filePath);

    /**
     * 相对路径
     *
     * @param relativePath 文件保存的相对路径
     * @return 文件保存的绝对路径
     */
    String getFullPath(String relativePath);


    /**
     * 获取文件后缀名
     *
     * @param fileName 文件名称
     * @return suffix
     */
    String getSuffix(String fileName);


    /**
     * 获取文件存储至磁盘的相对路径
     *
     * @param fileName 文件名
     * @param suffix   动态拼接的文件后缀，若该值为空则不拼接
     * @return 相对路径
     */
    String getDiskRelativePath(String fileName, String suffix);

}
