服务器之家

服务器之家 > 正文

java web上传文件和下载文件代码片段分享

时间:2020-07-31 15:35     来源/作者:夏诗鸢

本文实例为大家分享了java web上传文件下载文件的具体代码,供大家参考,具体内容如下

?
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
/**
 * Purpose:上传文档
 *
 * @param req
 * @param fileTitle
 * @param fileType
 * @param fileDesc
 * @return
 */
@RequestMapping("upload")
public ModelAndView upload(HttpServletRequest req, String fileType, String fileDesc, String share) {
 UserAllInfo userAll = (UserAllInfo) req.getSession().getAttribute("userAll");
 ModelAndView mav = new ModelAndView();
 // 获取文件的大小
 String fileSize = "";
 int length = req.getContentLength();
 //转换成KB
 double len1 = (double) (Math.round((length / 1024) * 100)) / 100;
 //转换成MB
 double len2 = (double) (Math.round((len1 / 1024) * 100)) / 100;
 if (len2 > 1) {
  fileSize = String.valueOf(len2) + "MB";
 } else {
  fileSize = String.valueOf(len1) + "KB";
 }
 //将请求转换成处理文件的请求
 MultipartRequest mreq = (MultipartRequest) req;
 //文件上传专用类
 MultipartFile mfile = mreq.getFile("uploadFile");
 
 // 得到上下文路径
 String root = req.getSession().getServletContext().getRealPath("/");
 File dir = new File(root);
 // 获取文件名和文件的mime类型
 String str = mfile.getOriginalFilename();
 String[] st = str.split("\\.");
 
 File savedFile = null;
 try {
  //在指定目录中创建一个新的空文件,文件名称加前缀"upload_"
  savedFile = File.createTempFile("upload_", mfile.getOriginalFilename(), dir);
  //将缓冲区的内容复制到新创建的文件中
  FileCopyUtils.copy(mfile.getInputStream(), new FileOutputStream(savedFile));
 } catch (Exception e) {
  e.printStackTrace();
 }
 String path = savedFile.getPath();
 
 // 将文件的信息封装在对象中
 FileInfo file = new FileInfo();
 if (userAll != null) {
  file.setUploadPersonId(userAll.getUser().getUserId());
 } else {
  mav.setViewName("login");
  return mav;
 }
 file.setFileName(st[0]);
 file.setFilePath(path);
 Date date = new Date();
 file.setUploadDate(date);
 file.setFileSize(fileSize);
 file.setFileType(fileType);
 file.setFileForm(st[1]);
 if ("superman".equals(userAll.getUser().getUserNumber())) {
  file.setFileShare("Y");
  file.setCheckFlag("Y");
 } else {
  file.setFileShare(share);
  file.setCheckFlag("N");
 }
 file.setDeleteFlag("N");
 file.setDownloadTimes(0);
 // 保存文件的信息
 boolean bool = fileSer.saveFile(file);
 String userNumber = userAll.getUser().getUserNumber();
 //设置跳转界面
 mav.setViewName("jsp/person/upload");
 logSer.saveLog("用户\"" + userNumber + "\"上传文件\"" + file.getFileName() + "\"");
 mav.getModel().put("bool", bool);
 return mav;
}
 
/**
 * Purpose:下载文档
 *
 * @param fileId 文件id
 * @return
 */
@RequestMapping("download")
public void download(Integer fileId, HttpServletResponse resp) {
 FileInfo file = new FileInfo();
 //通过文件id获取文件的基本信息
 file = fileSer.getFileById(fileId);
 
 // 根据文件后缀名设置文件的mime类型
 String mime = "application/";
 switch (file.getFileForm()) {
 case "doc":
  mime = mime + "msword";
  break;
 case "docx":
  mime = mime + "msword";
  break;
 case "pdf":
  mime = mime + "pdf";
  break;
 case "xls":
  mime = mime + "vnd.ms-excel";
 case "ppt":
  mime = mime + "vnd.ms-powerpoint";
  break;
 case "txt":
  mime = "text/plain";
  break;
 default:
  break;
 }
 resp.setContentType(mime);
 String fileName = file.getFileName();
 String name = "";
 try {
  // 将文件名使用utf-8编码格式编码,使其中的中文字符可以正常显示
  name = URLEncoder.encode(fileName, "utf-8");
 } catch (UnsupportedEncodingException e1) {
  e1.printStackTrace();
 }
 
 // 弹框选择保存路径
 resp.setHeader("content-disposition", "attachment;filename=" + name + "." + file.getFileForm()
   + ";filename*=utf-8''" + name + "." + file.getFileForm());
 
 String filePath = file.getFilePath();
 InputStream is = null;
 OutputStream os = null;
 try {
  is = new BufferedInputStream(new FileInputStream(filePath));
  os = new BufferedOutputStream(resp.getOutputStream());
  byte[] buff = new byte[1024];
  @SuppressWarnings("unused")
  int count;
  while ((count = is.read(buff)) != -1) {
   os.write(buff);
  }
  //修改下载次数
  fileSer.update(fileId);
 } catch (Exception e) {
  e.printStackTrace();
 } finally {
  //最后,要记得关闭输入流和输出流
  if (is != null) {
   try {
    is.close();
   } catch (IOException e) {
    e.printStackTrace();
   }
  }
  if (os != null) {
   try {
    os.close();
   } catch (IOException e) {
    e.printStackTrace();
   }
  }
 }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

相关文章

热门资讯

2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全 2019-12-26
歪歪漫画vip账号共享2020_yy漫画免费账号密码共享
歪歪漫画vip账号共享2020_yy漫画免费账号密码共享 2020-04-07
Intellij idea2020永久破解,亲测可用!!!
Intellij idea2020永久破解,亲测可用!!! 2020-07-29
男生常说24816是什么意思?女生说13579是什么意思?
男生常说24816是什么意思?女生说13579是什么意思? 2019-09-17
沙雕群名称大全2019精选 今年最火的微信群名沙雕有创意
沙雕群名称大全2019精选 今年最火的微信群名沙雕有创意 2019-07-07
返回顶部