All Downloads are FREE. Search and download functionalities are using the official Maven repository.

cc.shacocloud.mirage.web.http.MultipartFileUploadImpl Maven / Gradle / Ivy

package cc.shacocloud.mirage.web.http;

import io.vertx.core.file.FileSystem;
import io.vertx.ext.web.FileUpload;
import io.vertx.ext.web.RoutingContext;
import org.jetbrains.annotations.Nullable;

import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

/**
 * 基于{@link MultipartFileUpload}的默认实现
 */
public class MultipartFileUploadImpl implements MultipartFileUpload {

    private final Map fileMap;

    public MultipartFileUploadImpl(RoutingContext context) {
        List fileUploads = context.fileUploads();

        Map fileMap;
        if (fileUploads == null) {
            fileMap = Collections.emptyMap();
        } else {
            // 使用 vertx的文件系统
            FileSystem fs = context.vertx().fileSystem();
            fileMap = fileUploads.stream()
                .collect(Collectors.toMap(FileUpload::name, f -> new MultipartFileImpl(f, fs)));
        }

        this.fileMap = Collections.unmodifiableMap(fileMap);
    }

    @Override
    public boolean isEmpty() {
        return fileMap.isEmpty();
    }

    @Override
    public int size() {
        return fileMap.size();
    }

    @Override
    public MultipartFile get() throws IllegalArgumentException {
        if (fileMap.size() == 1) {
            return fileMap.entrySet().iterator().next().getValue();
        }
        throw new IllegalArgumentException("上传的文件数量为 '" + size() + "' ,文件数量不等于1无法直接获取!");
    }

    @Nullable
    @Override
    public MultipartFile get(String name) {
        return fileMap.get(name);
    }

    @Override
    public Map files() {
        return fileMap;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy