骑士李四记录 上传下载思路 1.接口处对文件的接收,如果参数就传一个文件,那简单就用 @RequestParam("fileName") MultipartFile file 如果参数除了文件还有其他参数,组成的对象,怎么接收呢
骑士李四记录
上传下载思路
1.接口处对文件的接收,如果参数就传一个文件,那简单就用
@RequestParam("fileName") MultipartFile file
如果参数除了文件还有其他参数,组成的对象,怎么接收呢,本id亲测用用这个注解就可以接受
@ModelAttribute("formData") Object object
2.对文件怎么上传,如果上传文件服务器,那就用你对应服务器的接口,去上传就ok,注意参数要求
MultipartFile file = objectgetFile();
3.下载,从服务器上下载,得到一个InputOutStream流,怎么通过浏览器下载下来,那就要一个个的读,然后写到输出流,通过浏览器下载。
下载代码
上传简单,这块写一下下载代码,主要练习一下流的操作,方便以后用,
//接口
public ResponseAbc<HttpServletResponse> downLoad(String fileName, HttpServletResponse response) {
try {
response.reset();
//attachment;fileName 不能乱修改,
response.setHeader("content-disposition", "attachment;fileName=" + URLEncoder.encode(fileName, "UTF-8"));
response.setContentType("application/force-download");
ossClient.downLoad(response.getOutputStream());
} catch (Exception e) {
logger.error("downLoad fail ", e);
return new ResponseAbc<>(HttpStatus.INTERNAL_SERVER_ERROR);
}
return new ResponseAbc<>(response,HttpStatus.OK);
}
}
//下载方法
public void downLoad(ServletOutputStream out) throws Exception{
InputStream inputStream = null;
byte[] bytes = null;
try {
//服务器获取流的方式,代码不便写出来,这里只写获取到之后怎么处理文件流
inputStream = object.getObjectContent();
bytes = new byte[inputStream.available()];
int i = inputStream.read(bytes);
while (i != -1) {
out.write(bytes, 0, i);
i = inputStream.read(bytes);
}
}catch (Exception e){
logger.info("downLoadFile is fail:{}",e);
}finally {
inputStream.close(); //先关输入流
out.close(); //再关输出流
out.flush(); //刷新缓存
}
}
网络上有位朋友写的比较全面,我这里只记录一些思路。
网友:https://www.jianshu.com/p/be1af489551c