java后端接收存储文件

 1、java代码

package cn.com.onsafe.api.controller.bullet;

import cn.com.onsafe.common.resp.Result;

import cn.hutool.core.io.FileUtil;
import org.apache.commons.codec.binary.Base64;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestPart;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.util.UUID;

/**
 * @Author: 双歌
 * @Data: 2024/7/31
 */
@RestController
@RequestMapping("/upload")
public class UploadController {

    @PostMapping("/bulletImage")
    public Result<Object> bulletImage(@RequestPart("file") MultipartFile file) throws IOException {

        String fileName = "";

        if (!file.isEmpty()) {

            //文件存放路径
            //方式1、文件路径以File对象的方式创建
            //File filePath = new File("L://upload");

            //方式2、文件路径以字符串对象的方式创建    两种方法都可以,FileUtil工具类会调用不同的方法
            String filePath = "Y:\\images\\user";

            if (!FileUtil.exist(filePath)) {

                //工具类源码
//                    public static boolean exist(String path) {
//                        return null != path && file(path).exists();
//                    }
//
//                    public static boolean exist(File file) {
//                        return null != file && file.exists();
//                    }

                //目录不存在,需要创建
                FileUtil.mkdir(filePath);
            }

            //获取文件名称+后缀
            String originalFilename = file.getOriginalFilename();
            if (originalFilename != null) {
                //截取文件名的到后缀
                String format = originalFilename.split("\\.")[1];
                String name = UUID.randomUUID().toString().replaceAll("-", "");
                fileName = name + "." + format;
            }

            //将文件写入磁盘,下面两种方法都可以`

            //使用胡图工具,以字节数组的方式,写入文件,返回一个文件路径对象,如果写入成功,返回实际的路径 D:\ upload\向日葵.png
            //File file1 = FileUtil.writeBytes(file.getBytes(), "D://upload/" + file.getOriginalFilename());

            //使用胡图工具,以输入流的方式,写入文件,返回一个文件路径对象,如果写入成功,返回实际的路径 D:\ upload\向日葵.png
            File file1 = FileUtil.writeFromStream(file.getInputStream(), filePath + "\\" + fileName);
            System.out.println(file1); //D:\ upload\向日葵.png
        }
        return new Result<>("http://192.168.1.253:8888/file/images/user/" + fileName);

        /**
         * MultipartFile 对象属性方法
         * getName方法获取的是前后端约定的传入文件的参数的名称
         * getOriginalFileName方法获取的是文件的完整名称,包括文件名称+文件拓展名。
         * getContentType方法获取的是文件的类型,注意是文件的类型,不是文件的拓展名。
         * isEmpty方法用来判断传入的文件是否为空,如果为空则表示没有传入任何文件。
         * getSize方法用来获取文件的大小,单位是字节。
         * getBytes方法用来将文件转换成一种字节数组的方式进行传输,会抛出IOException异常。
         * getInputStream方法用来将文件转换成输入流的形式来传输文件,会抛出IOException异常。
         * transferTo方法用来将接收文件传输到给定目标路径,会抛出IOException、IllegalStateException异常。该方法在实际项目开发中使用较少。
         */


    }
}

2、配置

        配置上传文件大小,默认为1MB

spring:
  servlet:
    multipart:
      max-file-size: 5MB
      max-request-size: 10MB

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用Minio上传多个文件并在Java后端接收,你需要使用Minio Java SDK和Apache Commons FileUpload库来处理文件上传请求,以下是一个简单的示例代码: ```java import java.io.InputStream; import java.util.List; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; import io.minio.MinioClient; import io.minio.errors.MinioException; import io.minio.policy.PolicyType; public class MinioUploadServlet extends HttpServlet { private static final long serialVersionUID = 1L; private static final int MAX_FILE_SIZE = 1024 * 1024 * 5; // 5MB private static final int MAX_REQUEST_SIZE = 1024 * 1024 * 10; // 10MB private static final String MINIO_ENDPOINT = "http://<minio-host>:<minio-port>"; private static final String MINIO_ACCESS_KEY = "<minio-access-key>"; private static final String MINIO_SECRET_KEY = "<minio-secret-key>"; private static final String MINIO_BUCKET_NAME = "<minio-bucket-name>"; @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 检查请求是否为文件上传类型 boolean isMultipart = ServletFileUpload.isMultipartContent(request); if (!isMultipart) { response.sendError(HttpServletResponse.SC_BAD_REQUEST, "Invalid request type."); return; } // 设置上传文件的临时存储目录 DiskFileItemFactory factory = new DiskFileItemFactory(); factory.setRepository(new File(System.getProperty("java.io.tmpdir"))); // 创建文件上传处理器 ServletFileUpload upload = new ServletFileUpload(factory); upload.setFileSizeMax(MAX_FILE_SIZE); upload.setSizeMax(MAX_REQUEST_SIZE); // 连接到Minio服务 MinioClient minioClient = new MinioClient.Builder() .endpoint(MINIO_ENDPOINT) .credentials(MINIO_ACCESS_KEY, MINIO_SECRET_KEY) .build(); // 处理上传文件 try { List<FileItem> items = upload.parseRequest(request); for (FileItem item : items) { if (!item.isFormField() && item.getSize() > 0) { // 上传文件到Minio服务 String fileName = item.getName(); InputStream stream = item.getInputStream(); minioClient.putObject(MINIO_BUCKET_NAME, fileName, stream, item.getContentType()); // 设置上传文件的访问权限 minioClient.setObjectPolicy(MINIO_BUCKET_NAME, fileName, PolicyType.PUBLIC_READ); } } } catch (Exception e) { response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e.getMessage()); return; } // 返回上传结果 response.setStatus(HttpServletResponse.SC_OK); response.getWriter().println("Upload successful."); } } ``` 在上面的示例代码中,我们首先检查请求是否为文件上传类型,然后设置上传文件的临时存储目录,并创建文件上传处理器。接下来,我们连接到Minio服务,处理上传文件,并将文件上传到Minio存储桶中。最后,我们为上传的文件设置访问权限,并返回上传结果。 注意,在使用上述代码之前,你需要先设置好Minio服务的访问密钥和桶名称,并将`io.minio:minio`和`org.apache.commons:commons-fileupload`库添加到你的Java项目中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值