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

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

/**

* 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();

}

}

}

}

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值