2019独角兽企业重金招聘Python工程师标准>>>
这一篇简单实现一个上传文件的功能,上传文件还是经常用到的,比如上传用户头像。其实上传和下载的原理都一样,都是对输入输出流进行操作。
1.使用java里面的读写文件来实现
这里主要使用了3个注解:@RestController,@PostMapping,@RequestParam 。
@RestController表示这个类是个控制器,可以接收和响应网络请求;@PostMapping配置了这个方法的访问路径,同时指定了请求方法为post;@RequestParam是请求附带的参数
package com.spring.upload.controller;import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;/**
* Created by zhangyi on 2017/4/10.
* 上传文件控制器
*/
@RestController
public class UploadController {/*** 文件存储路径*/private String path="F:\\UploadFile";@PostMapping("/uploadFile")public String uploadFile(@RequestParam("file")MultipartFile file) throws IOException {String result;File parentFile=new File(path);if (!parentFile.exists()) {//如果文件存储路径,则创建parentFile.mkdirs();}//MultipartFile会对上传的文件做一些封装,所以要获得源文件名要用file.getOriginalFilename()File myFile=new File(parentFile,file.getOriginalFilename());//下面就是java的一些基本东西了,创建文件,获取输入输出流,读写文件FileOutputStream out=null;InputStream in=null;try {myFile.createNewFile();out=new FileOutputStream(myFile);in=file.getInputStream();byte[] b=new byte[10*1024];int n;while ((n=in.read(b))!=-1){out.write(b,0,n);out.flush();}result="success";} catch (IOException e) {e.printStackTrace();result="fail";}finally {//最后关闭输入输出流,避免造成内存泄漏if (out != null) {out.close();}if (in != null) {in.close();}}return result;}
}
因为MultipartFile类的transferTo方法的封装,所以上面那一段对输入输出流的操作,可以换成下面的这段
package com.spring.upload.controller;import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;import java.io.File;
import java.io.IOException;/*** Created by zhangyi on 2017/4/10.* 上传文件控制器*/
@RestController
public class UploadController {/*** 文件存储路径*/private String path="F:\\UploadFile";@PostMapping("/uploadFile")public String uploadFile(@RequestParam("file")MultipartFile file) {String result;File parentFile=new File(path);if (!parentFile.exists()) {//如果文件存储路径,则创建parentFile.mkdirs();}//MultipartFile会对上传的文件做一些封装,所以要获得源文件名要用file.getOriginalFilename()File myFile=new File(parentFile,file.getOriginalFilename());try {file.transferTo(myFile);result="success";} catch (IOException e) {e.printStackTrace();result="fail";}return result;}
}