📜  Angular + Spring文件上传示例(1)

📅  最后修改于: 2023-12-03 14:59:17.667000             🧑  作者: Mango

#Angular + Spring文件上传示例

本篇文章将介绍如何使用Angular和Spring构建一个文件上传功能的示例。 文件上传是一个常见的功能,通过该功能,用户可以将自己喜欢的图片、音频或其他类型的文件上传到网站或者服务器上。技术上,文件上传可以通过AJAX发送POST请求,也可以直接提交表单完成。展示界面即可以使用原生的表单元素,也可以使用第三方的UI库,比如Angular Material。

Angular Frontend

在Angular的组件中,我们需要引入Angular的HttpClient模块进行文件上传操作。在template中,我们需要创建一个自定义表单,这可以通过Angular Material来实现。在这个表单中,我们需要添加一个input元素,type为file,并添加一个change事件,以便在文件上传时获取文件的信息。

import { Component, OnInit } from '@angular/core';
import { HttpClient } from '@angular/common/http';

@Component({
  selector: 'app-file-upload',
  templateUrl: './file-upload.component.html',
  styleUrls: ['./file-upload.component.css']
})
export class FileUploadComponent implements OnInit {

  selectedFile: File;

  constructor(private http: HttpClient) { }

  ngOnInit() {
  }

  onFileSelected(event) {
    this.selectedFile = event.target.files[0];
  }

  onUpload() {
    const fd = new FormData();
    fd.append('file', this.selectedFile, this.selectedFile.name);
    this.http.post('http://localhost:8080/upload', fd)
      .subscribe(res => {
        console.log(res);
      });
  }
}
<mat-card>
  <mat-card-title>File Upload</mat-card-title>
  <button mat-raised-button color="primary" (click)="fileUpload.click()">Select File</button>
  <input type="file" (change)="onFileSelected($event)" #fileUpload style="display:none">
  <button mat-raised-button color="accent" (click)="onUpload()">Upload</button>
</mat-card>
Spring Backend

在 Spring 中,我们需要通过 @RestController 注解将处理 HTTP 请求的类标记为 RESTful API 控制器。Spring Boot 也提供了内置的Multipart解析类库,它能够轻松处理文件上传请求。我们需要在这个控制器类上添加@RequestMapping注解,指定文件上传请求的路径和HTTP请求方法。Spring MVC中的 MultipartHttpServletRequest 使我们可以轻松处理多部分请求,以获取文件信息和处理文件上传请求。

import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;

@RestController
public class FileController {
    
    @PostMapping("/upload")
    public void upload(MultipartHttpServletRequest request) {
        MultipartFile file = request.getFile("file");
        System.out.println(file.getOriginalFilename());
        // save the file
    }
}
运行示例

为了运行示例,需要在本地环境或Tomcat或Jetty上运行Spring Boot应用。启动应用之后,在浏览器中访问前端代码。如果一切正常,用户将能够上传一个文件。

总结

文件上传是每个Web应用程序中必不可少的功能之一。本篇文章通过Angular和Spring的结合,构建了一个简单的文件上传功能的示例,为读者介绍了其中的实现原理。为了完整示例,请参考附件,其中包括前端和后端代码。