springboot实现前端用户上传图片保存到本地文件夹

springboot实现前端用户上传图片保存到本地文件夹

前言

使用技术:ajax springboot


提示:以下是本篇文章正文内容,下面案例可供参考

一、前端html主要代码

代码如下(示例):

<div id="main">
    <form  method="post"  action="addparent"  enctype="multipart/form-data" >
        <p class="clear"></p>
        <hr>
        <div class="info-left" id="camera">
            <input id="file" type="file"   style="display:none"   name="file"  onchange="upImg()">
            <img src="../asserts/images/uploadimg.png"  alt="上传照片"  id="img" onclick="file.click()">
        </div>
    </form>
</div>

二、前端js

代码如下(示例):

function upImg() {
        var fileObj = document.getElementById("file").files[0];//可以正常获取文件对象
        var FileController = "/addparent";
        if(!fileObj.type.match('image.*')){
            alert("请选择正确的图片");
        }else{
            var form = new FormData();//通过FormData构造函数创建一个空对象
            form.append("file",fileObj);//可以通过append()方法来追加数据
            var xhr = new XMLHttpRequest();调用GetXmlHttpRequest()并事例化GET,使用XMLHttpRequest 来发送 HTTP 请求以实现网站和服务器之间的数据交换。
            //Ajax 给 XMLHttpReq.onreadystatechange传递参数
            //readyState=0,1,2,3,4
            // 0: 请求未初始化
            // 1: 服务器连接已建立
            // 2: 请求已接收
            // 3: 正在处理请求
            // 4: 请求已完成且响应已就绪
            //readyState=200.403,404
            // 200: "OK"
            // 403: "Forbidden"
            // 404: "Page not found"
            xhr.onreadystatechange=function () {
                if(this.readyState == 4 && this.status == 200){
                    var b = this.responseText;//接收返回的TEXT OR XML 文档
                    if(b == "success"&&(fileObj.type.match('image.*'))){
                        alert("上传成功!");
                    }
                }
            };
            xhr.open("post", FileController, true);//规定请求的类型、URL 以及是否异步处理请求。
            xhr.send(form);//将请求发送到服务器。
        }
    }

三、后端控制层主要代码

代码如下(示例):

@Controller
public class FileController implements WebMvcConfigurer {
    @PostMapping("/addparent")
    @ResponseBody
    public String upFile(@RequestParam("file") MultipartFile file, Map map) {
        String path = "E:\\idea 专用文件夹\\用户上传图片到文件夹\\src\\main\\resources\\static\\img";
        String fileName = file.getOriginalFilename();//获取文件名称
        String suffixName=fileName.substring(fileName.lastIndexOf("."));//获取文件后缀
        fileName= UUID.randomUUID()+suffixName;//重新生成文件名
        System.out.println(fileName);
        System.out.println("type::" + suffixName);
        System.out.println("filename::" + fileName);
        File targetFile = new File(path);
        if (!targetFile.exists()) {
            // 判断文件夹是否未空,空则创建
            targetFile.mkdirs();
        }
        File saveFile = new File(targetFile, fileName);
        try {
            //指定本地存入路径
            file.transferTo(saveFile);
            System.out.println("执行成功");
            String path1 = path + fileName;
            System.out.println(path1);
            //     return "success";
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("执行失败");
            return "failed";
        }
        map.put("img",fileName);//Java 集合类中的 Map.put() 方法将获取 Map 集合的所有键名,并存放在一个 Set 集合对象中。
        System.out.println("11111");
        return "success";
    }
    @RequestMapping("/1")
    //前端html页面为ht.html
    public String header(){
        return "ht";
    }
}

参考链接:java前端上传图片保存到本地文件夹

亲测可用,这里参考别人代码加了一些注释方便了解意思。

  • 6
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,下面是一个简单的示例代码,演示如何使用Spring Boot将图像上传到本地文件夹并将其存储到数据库中,然后在前端使用。 首先,您需要在您的Spring Boot项目中添加以下依赖项: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.3</version> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-io</artifactId> <version>1.3.2</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> ``` 然后,您需要编写一个Controller来处理上传请求。以下是一个示例代码: ```java @RestController @RequestMapping("/api") public class ImageController { @Value("${upload.path}") private String uploadPath; @Autowired private ImageRepository imageRepository; @PostMapping("/upload") public ResponseEntity<String> uploadImage(@RequestParam("file") MultipartFile file) throws IOException { String fileName = StringUtils.cleanPath(file.getOriginalFilename()); Path path = Paths.get(uploadPath + fileName); Files.write(path, file.getBytes()); Image image = new Image(fileName, file.getContentType(), path.toString()); imageRepository.save(image); return ResponseEntity.ok("File uploaded successfully"); } } ``` 在上面的代码中,我们首先使用@Value注释注入了一个名为“upload.path”的配置项,用于指定上传文件的存储路径。然后,我们注入了一个ImageRepository,用于将图像存储到数据库中。我们创建了一个名为“uploadImage”的POST请求处理程序,该处理程序使用@RequestParam注释来接收上传的文件。我们使用StringUtils.cleanPath()方法来确保文件名不包含任何非法字符,并使用Files.write()方法将文件写入本地文件夹中。我们创建了一个新的Image对象来保存文件的元数据和存储路径,并将其保存到数据库中。最后,我们返回一个成功的响应。 接下来,您需要编写一个Image实体类,用于将图像元数据存储到数据库中。以下是一个示例代码: ```java @Entity @Table(name = "images") public class Image { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(length = 100) private String name; @Column(length = 100) private String type; private String path; // constructors, getters and setters } ``` 在上面的代码中,我们创建了一个名为“images”的表,用于存储图像。我们使用@Id注释将id字段标记为主键,并使用@GeneratedValue注释指定自动生成主键值。我们还使用@Column注释指定了name和type字段的长度,并添加了一个path字段来存储图像的存储路径。 最后,您需要编写一个简单的前端页面来上传图像。以下是一个示例代码: ```html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Upload Image</title> </head> <body> <h1>Upload Image</h1> <form action="/api/upload" method="post" enctype="multipart/form-data"> <input type="file" name="file"> <br><br> <input type="submit" value="Upload"> </form> </body> </html> ``` 在上面的代码中,我们创建了一个简单的HTML表单,用于上传图像。我们使用<form>元素指定了上传图像的URL和请求方法,并使用<input>元素添加了一个文件选择器和一个提交按钮。 希望这个示例能够帮助您了解如何使用Spring Boot将图像上传到本地文件夹并将其存储到数据库中,然后在前端使用。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值