文件上传代码实现

文件上传,页面端可以使用ElementUI提供的上传组件

<el-upload class="avatar-uploader"
                action="/common/upload"
                :show-file-list="false"
                :on-success="handleAvatarSuccess"
                :before-upload="beforeUpload"
                ref="upload">
            <img v-if="imageUrl" :src="imageUrl" class="avatar"></img>
            <i v-else class="el-icon-plus avatar-uploader-icon"></i>
</el-upload>

新建一个CommonController类,负责文件的上传和下载(过滤器拦截,可将该路径添加到不需要处理的路径数组中"/common/**")


package com.itheima.controller;

import com.itheima.common.R;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
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.IOException;
import java.util.UUID;


@RestController
@RequestMapping("/common")
@Slf4j
public class CommonController {

@Value("${reggie.path}")
private String basePath;
/**
* 文件上传和下载
* @param file
* @return
*/
@PostMapping("/upload")
public R<String> upload(MultipartFile file){
//MultipartFile的参数名必须和前端传过来的数据中的name值相同
//file是一个临时文件,需要转存到指定位置,否则本次请求完成后临时文件就会删除
log.info(file.toString());
//原始文件名
String name = file.getOriginalFilename();

//使用UUID重新生成文件名,防止文件名称重复造成文件覆盖
String suffix = name.substring(name.lastIndexOf("."));
String fileName = UUID.randomUUID().toString() + suffix;

//创建一个目录对象
File dir = new File(basePath);
//判断当前目录是否存在
if(!dir.exists()){
//目录不存在,需要创建
dir.mkdirs();
}
try {
//将临时文件转存到指定位置,转存路径可在配置文件中配置
file.transferTo(new File(basePath + fileName));
} catch (IOException e) {
e.printStackTrace();
}
return R.success(fileName);
}
}
 

 

posted @ 2023-03-08 10:43  佛系粥米  阅读(49)  评论(0编辑  收藏  举报