之前弄了前端的图片上传与下载,但是做后端的时候还是需要放在后端来处理比较好,话不多说直接上代码
上传
这里的R.success是我自定义的返回类型的方式,只需要返回给前端文件名就行
static String originalFilename;
static String basePath;
@PostMapping("/upload")
//只需要返回上传文件的名称
public R<String> upLoad(MultipartFile file){
log.info(file.toString());
originalFilename="";
basePath="";
originalFilename = file.getOriginalFilename(); //文件名
//UUid防止文件名的覆盖
String s = UUID.randomUUID().toString();
originalFilename=chageString(s);
basePath="D:\\"+"imag\\"; //自定义存放路径
try {
//文件的创建
File file1=new File(basePath);
if(!file1.exists()){ //如果不存在该路径下的文件
file1.mkdirs();
}
//文件的转存
file.transferTo(new File(basePath+originalFilename));
}catch (Exception e){
e.getMessage();
}
return R.success(originalFilename);
}
public static String chageString(String s){ //处理图片名的前缀
String[] split = originalFilename.split(".");
return s+"."+split[1];
下载
/**
* 文件的下载--已输出流的方式进行下载
* 可以通过response获得输出流的方式
* @Param name--为上传函数中返回到前端的 /*文件名称*/
*/
@GetMapping("/download/{name}")
public void downLoad (@PathVariable("name") String name, HttpServletResponse response) throws IOException{
//输入流--换为流的方式来读取文件的内容,从磁盘输入到内存中;从文件系统中的文件获取输入字节。
FileInputStream fileInputStream=new FileInputStream(basePath+name);
//输出流--文件从内存输出到磁盘中,将文件写回浏览器,并实现展示
ServletOutputStream outputStream = response.getOutputStream();//获取输出流的方式
byte[] bytes=new byte[1024];
int len=0;
response.setContentType("image/jpeg");///设置一下输出的数据类型,我这里设置的是jpeg
while ((len=fileInputStream.read(bytes))!=-1){
outputStream.write(bytes,0,len+1);
outputStream.flush();
}
outputStream.close();
fileInputStream.close();
}
在做该功能的时候,无论的是前端实现还是后端实现,应该是要根据自己项目的情况来定,当然我们得首先要学会这两种的实现方式。
目前还在学习阶段,有什么问题可以提出,一起学习!