在Springboot中实现附件上传功能

# 在Springboot中实现附件上传功能

## pom.xml文件
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
 Controller文件

import org.springframework.http.ResponseEntity;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardCopyOption;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;

@RestController
@RequestMapping("/api")
public class FileUploadController {

    private static final String UPLOAD_DIR = "uploads";

    @PostMapping("/upload")
    public ResponseEntity<String> uploadFiles(MultipartFile[] files) {
        try {
            List<String> uploadedFiles = new ArrayList<>();

            // 检查是否选择了文件
            if (files == null || files.length == 0) {
                return ResponseEntity.badRequest().body("请选择要上传的文件");
            }

            for (MultipartFile file : files) {
                // 获取上传文件的原始文件名
                String originalFileName = StringUtils.cleanPath(file.getOriginalFilename());

                // 生成唯一的文件名
                String fileName = UUID.randomUUID().toString() + "-" + originalFileName;

                // 创建上传目录
                File uploadsDir = new File(UPLOAD_DIR);
                if (!uploadsDir.exists()) {
                    uploadsDir.mkdirs();
                }

                // 保存文件到指定路径
                Path filePath = uploadsDir.toPath().resolve(fileName);
                InputStream inputStream = file.getInputStream();
                OutputStream outputStream = new FileOutputStream(filePath.toFile());
                copyStream(inputStream, outputStream);
                outputStream.close();
                inputStream.close();

                uploadedFiles.add(filePath.toString());
            }

            // 执行保存文件的逻辑,例如保存文件路径到数据库
            // 这里只是简单打印一下上传的文件路径
            System.out.println("上传文件路径: " + uploadedFiles);

            return ResponseEntity.ok("文件上传成功");
        } catch (IOException e) {
            // 处理上传失败的异常情况
            return ResponseEntity.status(500).body("文件上传失败");
        }
    }

    private void copyStream(InputStream inputStream, OutputStream outputStream) throws IOException {
        byte[] buffer = new byte[4096];
        int bytesRead;
        while ((bytesRead = inputStream.read(buffer)) != -1) {
            outputStream.write(buffer, 0, bytesRead);
        }
        outputStream.flush();
    }
}
 在application.yml文件中配置

# 上传文件的大小限制
  servlet:
    multipart:
      enabled: true # 多部分文件上传
      max-file-size: 100000MB # 设置单个文件上传的最大大小
      max-request-size: 100000MB  # 设置整个请求的最大大小(包括多个文件)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
实现Spring Boot和ueditor1.4.33的附件上传至本地的步骤如下: 1. 添加ueditor1.4.33的jar包依赖,在pom.xml添加以下代码: ```xml <dependency> <groupId>com.baidu.ueditor</groupId> <artifactId>ueditor</artifactId> <version>1.4.3</version> </dependency> ``` 2. 配置ueditor,在resources目录下创建config.json文件,添加以下代码: ```json { "imageActionName": "uploadimage", "imageFieldName": "upfile", "imageMaxSize": 2048000, "imageAllowFiles": [".png", ".jpg", ".jpeg", ".gif", ".bmp"], "imageCompressEnable": true, "imageCompressBorder": 1600, "imageInsertAlign": "none", "imageUrlPrefix": "", "imagePathFormat": "/ueditor/jsp/upload/image/{yyyy}{mm}{dd}/{time}{rand:6}", "scrawlActionName": "uploadscrawl", "scrawlFieldName": "upfile", "scrawlPathFormat": "/ueditor/jsp/upload/image/{yyyy}{mm}{dd}/{time}{rand:6}", "scrawlMaxSize": 2048000, "scrawlUrlPrefix": "", "scrawlInsertAlign": "none", "snapscreenActionName": "uploadimage", "snapscreenPathFormat": "/ueditor/jsp/upload/image/{yyyy}{mm}{dd}/{time}{rand:6}", "snapscreenUrlPrefix": "", "snapscreenInsertAlign": "none", "catcherLocalDomain": ["127.0.0.1", "localhost", "img.baidu.com"], "catcherActionName": "catchimage", "catcherFieldName": "source", "catcherPathFormat": "/ueditor/jsp/upload/image/{yyyy}{mm}{dd}/{time}{rand:6}", "catcherUrlPrefix": "", "catcherMaxSize": 2048000, "catcherAllowFiles": [".png", ".jpg", ".jpeg", ".gif", ".bmp"], "videoActionName": "uploadvideo", "videoFieldName": "upfile", "videoPathFormat": "/ueditor/jsp/upload/video/{yyyy}{mm}{dd}/{time}{rand:6}", "videoUrlPrefix": "", "videoMaxSize": 102400000, "videoAllowFiles": [ ".flv", ".swf", ".mkv", ".avi", ".rm", ".rmvb", ".mpeg", ".mpg", ".ogg", ".ogv", ".mov", ".wmv", ".mp4", ".webm", ".mp3", ".wav", ".mid" ], "fileActionName": "uploadfile", "fileFieldName": "upfile", "filePathFormat": "/ueditor/jsp/upload/file/{yyyy}{mm}{dd}/{time}{rand:6}", "fileUrlPrefix": "", "fileMaxSize": 51200000, "fileAllowFiles": [ ".png", ".jpg", ".jpeg", ".gif", ".bmp", ".flv", ".swf", ".mkv", ".avi", ".rm", ".rmvb", ".mpeg", ".mpg", ".ogg", ".ogv", ".mov", ".wmv", ".mp4", ".webm", ".mp3", ".wav", ".mid", ".rar", ".zip", ".tar", ".gz", ".7z", ".bz2", ".cab", ".iso", ".doc", ".docx", ".xls", ".xlsx", ".ppt", ".pptx", ".pdf", ".txt", ".md", ".xml" ], "imageManagerActionName": "listimage", "imageManagerListPath": "/ueditor/jsp/upload/image/", "imageManagerListSize": 20, "imageManagerUrlPrefix": "", "imageManagerInsertAlign": "none", "imageManagerAllowFiles": [".png", ".jpg", ".jpeg", ".gif", ".bmp"], "fileManagerActionName": "listfile", "fileManagerListPath": "/ueditor/jsp/upload/file/", "fileManagerUrlPrefix": "", "fileManagerListSize": 20, "fileManagerAllowFiles": [ ".png", ".jpg", ".jpeg", ".gif", ".bmp", ".flv", ".swf", ".mkv", ".avi", ".rm", ".rmvb", ".mpeg", ".mpg", ".ogg", ".ogv", ".mov", ".wmv", ".mp4", ".webm", ".mp3", ".wav", ".mid", ".rar", ".zip", ".tar", ".gz", ".7z", ".bz2", ".cab", ".iso", ".doc", ".docx", ".xls", ".xlsx", ".ppt", ".pptx", ".pdf", ".txt", ".md", ".xml" ] } ``` 3. 在Controller添加上传附件的方法,例如: ```java @Controller @RequestMapping("/file") public class FileController { @PostMapping("/upload") @ResponseBody public Map<String, Object> uploadFile(HttpServletRequest request, HttpServletResponse response) { // 获取配置文件路径 String rootPath = request.getSession().getServletContext().getRealPath("/"); String configPath = rootPath + "config.json"; // 创建配置对象 ConfigManager configManager = ConfigManager.getInstance(rootPath, "http://localhost:8080/ueditor/jsp"); try { // 初始化配置 configManager.initEnv(configPath); } catch (Exception e) { e.printStackTrace(); return null; } // 创建上传对象 UEditorUploader uploader = new BinaryUploader(configManager, request, response); // 执行上传 Map<String, Object> result = uploader.doExec(); return result; } } ``` 4. 在前端页面使用ueditor上传附件,例如: ```html <!-- 加载ueditor --> <script type="text/javascript" src="/ueditor/ueditor.config.js"></script> <script type="text/javascript" src="/ueditor/ueditor.all.js"></script> <!-- 创建ueditor实例 --> <script type="text/javascript"> var ue = UE.getEditor('editor'); </script> <!-- 创建上传按钮 --> <div class="btn btn-primary" onclick="chooseFile()">上传文件</div> <!-- 上传文件 --> <script type="text/javascript"> function chooseFile() { // 创建表单对象 var formData = new FormData(); // 获取文件对象 var file = document.getElementById("file").files[0]; // 添加文件到表单 formData.append("upfile", file); // 发送ajax请求 $.ajax({ url: "/file/upload", type: "POST", data: formData, cache: false, contentType: false, processData: false, success: function (result) { if (result.state === "SUCCESS") { // 上传成功,将附件地址添加到ueditor ue.execCommand('insertHtml', '<a href="' + result.url + '">' + result.title + '</a>'); } else { alert("上传失败"); } } }); } </script> ``` 以上就是实现Spring Boot和ueditor1.4.33的附件上传至本地的完整步骤。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天才在左#疯子在右

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值