vue+SpringBoot实现文件上传

文章目录

    • Vue获取文件
    • 后台项目依赖
    • 文件上传相关配置
    • 文件上传后台代码
    • 文件上传工具类

今天我们来学习使用Vue+SpringBoot来实现文件上传,其实今天的重点在于前端使用Vue获取文件,并传输到后台,至于后台上传文件则是通用的代码。

Vue获取文件

  • upload.html

前端我们使用了Vue.js,其中使用axios来发送异步请求。

<div id="app">
    <input type="file" @change="getFile($event)">
    <input type="button" value="上传" @click="upload()">
div>
body>
<script>
    const app = new Vue({
        el: "#app",
        data: {
            formData: new FormData(),
        },
        methods: {
            upload() {
                axios.post("/upload/image",this.formData).then(resp => {
                    if (resp.status == 200) {
                        alert("success");
                    }
                });
            },
            getFile(event) {
                let file = event.target.files[0];
                let fileName = file.name;
                let index = fileName.lastIndexOf(".");
                if (index != -1) {
                    let suffix = fileName.substr(index + 1).toLowerCase();
                    if (suffix == 'png' || suffix == 'jpg') {
                        this.formData.append("file",file);
                    }
                }
            }
        }
    })
script>

后台项目依赖


<parent>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-starter-parentartifactId>
    <version>2.0.4.RELEASEversion>
parent>

<dependencies>
	
    <dependency>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-webartifactId>
    dependency>
    
    <dependency>
        <groupId>commons-iogroupId>
        <artifactId>commons-ioartifactId>
        <version>2.6version>
    dependency>
    
    <dependency>
        <groupId>org.projectlombokgroupId>
        <artifactId>lombokartifactId>
    dependency>
dependencies>

文件上传相关配置

  • application.yml
file:
  upload:
    path: G:\temp\images\   #文件上传目标路径
    allowTypes:             #文件上传允许的类型
      - image/jpeg
      - image/png
      - image/jpg
      - image/bmp
  • UploadProperties.java
/**
 * 图片上传的Java配置类,通过SpringBoot自动读取配置文件注入
 */
@Data
@Component
@ConfigurationProperties(prefix = "file.upload")
public class UploadProperties {
	// 图片上传路径
    private String path;
    // 文件上传允许类型
    private List<String> allowTypes;
}
/**
 * 图片上传的Java配置类
 */
@Configuration
public class UploadConfig {

    @Bean
    public MultipartConfigElement multipartConfigElement() {
        MultipartConfigFactory factory = new MultipartConfigFactory();
        //  单个数据大小
        factory.setMaxFileSize("10240KB");
        /// 总上传数据大小
        factory.setMaxRequestSize("102400KB");
        return factory.createMultipartConfig();
    }
}

文件上传后台代码

  • controller层
@RestController
@RequestMapping("upload")
public class UploadController {

    @Autowired
    private UploadService uploadService;

    @PostMapping("image")
    public ResponseEntity<String> upload(@RequestParam("file") MultipartFile file) throws Exception {
        return ResponseEntity.ok(uploadService.uploadImage(file));
    }
}
  • service层接口
public interface UploadService {

    /**
     * 上传图片
     * @param file
     * @return
     * @throws Exception
     */
    String uploadImage(MultipartFile file) throws Exception;
}
  • service层实现
@Service
public class UploadServiceImpl implements UploadService {

    @Autowired
    private UploadProperties uploadProperties;

    @Override
    public String uploadImage(MultipartFile file) throws IOException {
        if(!uploadProperties.getAllowTypes().contains(file.getContentType())){
            throw new IOException("文件上传类型错误!");
        }
        String fileName = UploadUtils.generateFileName(file.getOriginalFilename());
        file.transferTo(new File(uploadProperties.getPath()+fileName));
        return fileName;
    }
}

文件上传工具类

  • IDUtils
public class IDUtils {

    /**
     * 唯一ID生成器,可以生成唯一ID
     *
     * @return 唯一ID
     */
    public static String generateUniqueId() {
        return UUID.randomUUID().toString() + System.currentTimeMillis();
    }
}
  • UploadUtils
public class UploadUtils {

    /**
     * 文件名称替换工具,将文件名称替换为随机名称
     *
     * @param oldName 上传文件名字
     * @return 生成的新文件名
     */
    public static String generateFileName(String oldName) {
        String suffix = oldName.substring(oldName.lastIndexOf("."));
        return IDUtils.generateUniqueId() + suffix;
    }
}

你可能感兴趣的:(前端)