spring boot 引入”约定大于配置“的概念,实现自动配置,节约了开发人员的开发成本,并且凭借其微服务架构的方式和较少的配置,一出来就占据大片开发人员的芳心。大部分的配置从开发人员可见变成了相对透明了,要想进一步熟悉还需要关注源码。
1.文件上传(前端页面):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> < html > < head > < meta http-equiv = "Content-Type" content = "text/html; charset=UTF-8" > < title >Insert title here</ title > </ head > < body > < form action = "/testUpload" method = "POST" enctype = "multipart/form-data" > < input type = "file" name = "file" /> < input type = "submit" /> </ form > < a href = "/testDownload" rel = "external nofollow" >下载</ a > </ body > </ html > |
表单提交加上enctype="multipart/form-data"很重要,文件以二进制流的形式传输。
2.文件上传(后端java代码)支持多文件
Way1.使用MultipartHttpServletRequest来处理上传请求,然后将接收到的文件以流的形式写入到服务器文件中:
1
2
3
4
5
6
7
8
9
10
11
12
|
@RequestMapping (value= "/testUpload" ,method=RequestMethod.POST) public void testUploadFile(HttpServletRequest req,MultipartHttpServletRequest multiReq) throws IOException{ FileOutputStream fos= new FileOutputStream( new File( "F://test//src//file//upload.jpg" )); FileInputStream fs=(FileInputStream) multiReq.getFile( "file" ).getInputStream(); byte [] buffer= new byte [ 1024 ]; int len= 0 ; while ((len=fs.read(buffer))!=- 1 ){ fos.write(buffer, 0 , len); } fos.close(); fs.close(); } |
Way2.也可以这样来取得上传的file流:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
// 文件上传 @RequestMapping ( "/fileUpload" ) public Map fileUpload( @RequestParam ( "file" ) MultipartFile file, HttpServletRequest req) { Map result = new HashMap(); SimpleDateFormat df = new SimpleDateFormat( "yyyyMMdd" ); // 设置日期格式 String dateDir = df.format( new Date()); // new Date()为获取当前系统时间 String serviceName = UuidUtil.get32UUID() + file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf( "." )); File tempFile = new File(fileDir + dateDir + File.separator + serviceName); if (!tempFile.getParentFile().exists()) { tempFile.getParentFile().mkdirs(); } if (!file.isEmpty()) { try { BufferedOutputStream out = new BufferedOutputStream( new FileOutputStream(tempFile)); // "d:/"+file.getOriginalFilename() 指定目录 out.write(file.getBytes()); out.flush(); out.close(); } catch (FileNotFoundException e) { e.printStackTrace(); result.put( "msg" , "上传失败," + e.getMessage()); result.put( "state" , false ); return result; } catch (IOException e) { e.printStackTrace(); result.put( "msg" , "上传失败," + e.getMessage()); result.put( "state" , false ); return result; } result.put( "msg" , "上传成功" ); String fileId = Get8uuid.generateShortUuid(); String fileName = file.getOriginalFilename(); String fileType = fileName.substring(fileName.lastIndexOf( "." ) + 1 ); String fileUrl = webDir + dateDir + '/' + serviceName; uploadMapper.saveFileInfo(fileId, serviceName, fileType, fileUrl); result.put( "state" , true ); return result; } else { result.put( "msg" , "上传失败,因为文件是空的" ); result.put( "state" , false ); return result; } |
3.application.properties配置文件
1
2
3
|
#上传文件大小设置 multipart.maxFileSize=500Mb multipart.maxRequestSize=500Mb |
4.文件下载将文件写到输出流里:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
@RequestMapping (value= "/testDownload" ,method=RequestMethod.GET) public void testDownload(HttpServletResponse res) throws IOException{ File file = new File( "C:/test.txt" ); resp.setHeader( "content-type" , "application/octet-stream" ); resp.setContentType( "application/octet-stream" ); resp.setHeader( "Content-Disposition" , "attachment;filename=" + fileName); byte [] buff = new byte [ 1024 ]; BufferedInputStream bis = null ; OutputStream os = null ; try { os = resp.getOutputStream(); bis = new BufferedInputStream( new FileInputStream(file)); int i = bis.read(buff); while (i != - 1 ) { os.write(buff, 0 , buff.length); os.flush(); i = bis.read(buff); } } catch (IOException e) { e.printStackTrace(); } finally { if (bis != null ) { try { bis.close(); } catch (IOException e) { e.printStackTrace(); } } } } |
5.获取文件大小
1
2
3
4
5
6
7
8
9
10
11
12
13
|
// 文件大小转换 DecimalFormat df1 = new DecimalFormat( "0.00" ); String fileSizeString = "" ; long fileSize = file.getSize(); if (fileSize < 1024 ) { fileSizeString = df1.format(( double ) fileSize) + "B" ; } else if (fileSize < 1048576 ) { fileSizeString = df1.format(( double ) fileSize / 1024 ) + "K" ; } else if (fileSize < 1073741824 ) { fileSizeString = df1.format(( double ) fileSize / 1048576 ) + "M" ; } else { fileSizeString = df1.format(( double ) fileSize / 1073741824 ) + "G" ; } |
如果是File类则fileSize=file.length()。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。