SpringBoot中文件上传

该文章描述了一个SpringBoot应用中用于上传图片的POST接口`/upload`,支持`multipart/form-data`格式。图片会被存储到MinIO或阿里云OSS服务中。Controller层调用相应的工具类进行文件上传,并返回一个包含成功信息和图片访问URL的JSON响应。
摘要由CSDN通过智能技术生成

基本信息:

请求路径:/upload

请求方式:POST

接口描述:上传图片接口

请求参数:

参数格式:multipart/form-data

参数说明:

参数名称参数类型是否必须示例备注
imagefile

响应数据:

参数格式:application/json

参数说明:

参数名类型是否必须备注
codenumber必须响应码,1 代表成功,0 代表失败
msgstring非必须提示信息
dataobject非必须返回的数据,上传图片的访问路径

响应数据样例:

{
    "code": 1,
    "msg": "success",
    "data": "https://web-framework.oss-cn-hangzhou.aliyuncs.com/2022-09-02-00-27-0400.jpg"
}

Controller层: 

@Slf4j  //日志
@RestController //声明IOC容器中的bean对象
public class UploadController {

//    @Autowired   //依赖注入
//    private AliOSSUtils aliOSSUtils;    //阿里云存储

    @Autowired
    private FileUploader fileUploader;  //MinIO存储

    @PostMapping("/upload")  //请求url
    public Result upload(MultipartFile image) throws Exception {
        //调用阿里云OSS工具类,将上传上来的文件存入阿里云
//        String url = aliOSSUtils.upload(image);

        //调用MinIO工具类,将上传上来的文件存入MinIO
        String url = fileUploader.upload(image);


        //将图片上传完成后的url返回,用于浏览器回显展示
        return Result.success(url);
    }

}

调用MinIO工具类:

@Component
public class FileUploader {

    public String upload(MultipartFile file) throws IOException, NoSuchAlgorithmException, InvalidKeyException {

        try {
            String bucketName = "web-itcast";  // 桶名称
            // 使用MinIO服务的URL,端口,Access key和Secret key创建一个MinioClient对象
            MinioClient minioClient =
                    MinioClient.builder()
                            .endpoint("http://127.0.0.1:9000")
                            .credentials("minioad***", "minioad***")
                            .build();

            // 检查存储桶是否已经存在
            boolean isExist = minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build());
            if (isExist) {
                System.out.println("Bucket already exists.");
            } else {
                // 创建一个名为 huike-crm 的存储桶,用于存储照片的zip文件。
                minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build());
            }

            String fileName = file.getOriginalFilename();//合同.pdf
            String objectName = new SimpleDateFormat("yyyy/MM/dd/").format(new Date()) + UUID.randomUUID().toString().replaceAll("-", "")
                    + fileName.substring(fileName.lastIndexOf("."));




            // 使用putObject上传一个文件到存储桶中。
            PutObjectArgs objectArgs = PutObjectArgs.builder().object(objectName)
                    .bucket(bucketName)
                    .contentType(file.getContentType())
                    .stream(file.getInputStream(), file.getSize(), -1).build();
            minioClient.putObject(objectArgs);

            // 返回上传文件名
            return "http://127.0.0.1:9000/"+bucketName+"/"+objectName;
        } catch (MinioException e) {

            System.out.println("Error occurred: " + e);
            System.out.println("HTTP trace: " + e.httpTrace());

        }
        return  null;
    }

}

aliyun工具类:

@Component
public class AliOSSUtils {

    private String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
    private String accessKeyId = "***";
    private String accessKeySecret = "***";
    private String bucketName = "web-duangu";

    /**
     * 实现上传图片到OSS
     */
    public String upload(MultipartFile multipartFile) throws IOException {
        // 获取上传的文件的输入流
        InputStream inputStream = multipartFile.getInputStream();

        // 避免文件覆盖
        String originalFilename = multipartFile.getOriginalFilename();
        String fileName = UUID.randomUUID().toString() + originalFilename.substring(originalFilename.lastIndexOf("."));

        //上传文件到 OSS
        OSS ossClient = new OSSClientBuilder().build(aliOSSProPerties.getEndpoint(), aliOSSProPerties.getAccessKeyId(), aliOSSProPerties.getAccessKeySecret());
        ossClient.putObject(aliOSSProPerties.getBucketName(), fileName, inputStream);

        //文件访问路径
        String url = aliOSSProPerties.getEndpoint().split("//")[0] + "//" + aliOSSProPerties.getBucketName() + "." + aliOSSProPerties.getEndpoint().split("//")[1] + "/" + fileName;

        // 关闭ossClient
        ossClient.shutdown();
        return url;// 把上传到oss的路径返回
    }
}

返回值类型Result:

@Data //get、set方法
@NoArgsConstructor //无参构造器
@AllArgsConstructor    //有参构造器
public class Result {
    private Integer code;//响应码,1 代表成功; 0 代表失败
    private String msg;  //响应信息 描述字符串
    private Object data; //返回的数据

    //增删改 成功响应
    public static Result success(){
        return new Result(1,"success",null);
    }
    //查询 成功响应
    public static Result success(Object data){
        return new Result(1,"success",data);
    }
    //失败响应
    public static Result error(String msg){
        return new Result(0,msg,null);
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值