package com.erp.file.service.storage;

import org.springframework.web.multipart.MultipartFile;

import java.io.InputStream;

/**
 * 存储策略接口
 */
public interface StorageStrategy {
    
    /**
     * 上传文件
     * @param file 上传的文件
     * @param path 存储路径
     * @param storageName 存储文件名
     * @return 访问URL
     */
    String upload(MultipartFile file, String path, String storageName);
    
    /**
     * 下载文件
     * @param path 文件路径
     * @return 文件输入流
     */
    InputStream download(String path);
    
    /**
     * 删除文件
     * @param path 文件路径
     */
    void delete(String path);
    
    /**
     * 检查文件是否存在
     * @param path 文件路径
     * @return 是否存在
     */
    boolean exists(String path);
    
    /**
     * 获取文件访问URL
     * @param path 文件路径
     * @return 访问URL
     */
    String getUrl(String path);
    
    /**
     * 获取文件完整路径
     * @param path 文件路径
     * @return 完整路径
     */
    String getFullPath(String path);
    
    /**
     * 获取存储类型标识
     * @return local/oss/minio
     */
    String getType();
}
