package com.philisense.www.cloud;

import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.io.InputStream;
import java.util.Map;

/**
 * @description: Oss基础客户端
 **/
public abstract class OssStorageService {

    /**
     * 文件上传
     *
     * @param file 文件
     * @param filePath 附件路径
     * @return
     */
    public abstract Map<String, Object> upload(MultipartFile file, String filePath);

    /**
     * 流文件上传
     *
     * @param data 流文件
     * @param filePath 附件路径
     * @return
     */
    public abstract Map<String, Object> upload(byte[] data, String filePath);

    /**
     * 下载文件
     *
     * @param filePath 附件路径
     * @return
     */
    public abstract InputStream download(String filePath);

    /**
     * 删除文件
     *
     * @param filePath 附件路径
     * @return
     */
    @Deprecated
    public abstract void delete(String filePath);

    /**
     * 生成下载的url
     * @param filePath 附件路径
     * @return
     */
    public abstract String getUrl(String filePath);

    /**
     * 大文件上传检查文件
     * @param filePath 附件路径
     * @param name 文件名
     * @param hash 文件HASH
     * @param fileSize 文件大小
     * @param total    文件分割总数量
     * @return
     */
    public abstract Map<String, Object> chunksCheck(String filePath, String name, String hash, Integer fileSize, Integer total);

    /**
     * 上传切片
     * @param file   文件
     * @param filePath 附件路径
     * @param hash  文件HASH
     * @param uploadId   上传Id
     * @param index      下标
     * @param fileSize  文件大小
     * @return
     * @throws IOException
     */
    public abstract Map<String, Object> chunksUpload(MultipartFile file, String filePath, String hash, String uploadId, Integer index, String fileSize);

    /**
     * 合并切片
     * @param filePath 附件路径
     * @param name  文件名
     * @param hash  文件HASH
     * @param uploadId   上传Id
     * @param fileSize   文件大小
     * @return
     */
    public abstract Map<String, Object> chunksMerge(String filePath, String name, String hash, String uploadId, String fileSize);
}
