喜欢的朋友可以关注下,粉丝也缺。

今天发现已经有很久没有给大家分享一篇技术文章了,于是想了一下给大家分享一篇java实现文件上传下载功能的文章,不喜欢的希望大家勿喷。

想必大家都知道文件的上传前端页面是需要用表单来提交,下面我就直接贴代码:

<div style="margin-bottom:5px" id="wjid">
<form action="/automaticffice/SmartUploadServlet" method="post"
enctype="multipart/form-data">
<input id="filename" name="filename" type="file"
/> <input type="submit" class="easyui-linkbutton" icon="icon-ok" value="提 交" /><span style="color: red">${message}</span>
</form>
</div>

  

  下面我们来说说后台的代码应该怎么写,这里我是用了 jspSmartUpload.jar 这个包,使用非常的方便,这里我提供一个下载地址给大家

https://download.csdn.net/download/dsn727455218/10422388

  还是直接上代码:

  

@WebServlet("/SmartUploadServlet")
public class SmartUploadServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private Connection conn;
private PreparedStatement pst; /**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
// 设置上传的保存路径
String filePath = getServletContext().getRealPath("/") + "\\upload\\";
System.err.println(filePath);
// 创建文件对象 如果存在就不创建,否则创建文件夹
File file = new File(filePath);
if (file.exists()) {
file.mkdir();
}
// 创建SmartUpload对象
SmartUpload su = new SmartUpload();
// 初始化对象
su.initialize(getServletConfig(), request, response);
// 设置上传文件大小
su.setTotalMaxFileSize(1024 * 1024 * 100);
// 设置上传文件类型
// su.setAllowedFilesList("txt,jpg,gif,xls,doc,docx");
// 创建提示变量
String result = "上传成功";
try {
// 设置禁止上传类型
// su.setDeniedFilesList("rar,jsp,js");
su.upload();
// 返回上传文件数量
int count = su.save(filePath);
System.out.println("上传成功" + count + "个文件!"); } catch (Exception e) {
result = "上传失败";
e.printStackTrace();
} // 获取上传成功的文件的属性
for (int i = 0; i < su.getFiles().getCount(); i++) {
com.jspsmart.upload.File tempFile = su.getFiles().getFile(i);
System.out.println("---------------------");
System.out.println("表单当中name属性值:" + tempFile.getFieldName());
System.out.println("上传文件名:" + tempFile.getFieldName());
System.out.println("上传文件长度:" + tempFile.getSize());
System.out.println("上传文件的拓展名:" + tempFile.getFileExt());
System.out.println("上传文件的全名:" + tempFile.getFilePathName());
System.out.println("---------------------"); }
request.setAttribute("message", result); RequestDispatcher dispatcher = request.getRequestDispatcher("do/wenjian.jsp");
dispatcher.forward(request, response);
} /**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
} }

  

  其实上传文件就是这么的简单,下面我们来说说文件的下载,相信很多的朋友有遇到过文件名字为中文的文件就无法下载的问题,接下来我们就详细的来说下这个问题:

同样的前端还是要以表单的方式提交:

input里面value的值是你需要下载文件的名字,action都知道是servetl的路径了

  

<form action="/automaticffice/BatchDownloadServlet"> <input type="hidden" name="filename" value="' + cellvalue + '"/> <input type="submit" value="下载文件"/></form> 

  在servlet中如何接收处理:

  

@WebServlet("/BatchDownloadServlet")
public class BatchDownloadServlet extends HttpServlet {
private static final long serialVersionUID = 1L; /**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { String name = request.getParameter("filename");
/**
* 这里是重点,如何解决文件名为中文的问题,不同的浏览器处理的方式会有所不同
* IE的话,通过URLEncoder对filename进行UTF8编码,
* 而其他的浏览器(firefox、chrome、safari、opera),则要通过字节转换成ISO8859-1了
* 所以这里我们需要判断一下使用的是什么浏览器 在根据浏览器来做相应的编码
*/
if (request.getHeader("User-Agent").toUpperCase().indexOf("MSIE") > 0) {
name = URLEncoder.encode(name, "UTF-8");
} else {
name = new String(name.getBytes(), "ISO-8859-1");
}
response.setContentType("application/octet-stream");
// 以附件的形式下载
response.setHeader("Content-Disposition", "attachment;filename=\"" + name + "\""); // 获取下载路径
String path = getServletContext().getRealPath("/") + "\\upload\\";
// 获取文件数组
String[] filenames = request.getParameterValues("filename");
// 创建空字符串
String str = "";
// 换行符
String rt = "\r\n";
// 创建压缩包输出流
ZipOutputStream zos = new ZipOutputStream(response.getOutputStream());
// 遍历文件数组
for (String filename : filenames) {
str += filename + rt;
// 创建文件对象
File file = new File(path + filename);
zos.putNextEntry(new ZipEntry(filename));
// 创建文件输出流
FileInputStream fis = new FileInputStream(file);
byte[] b = new byte[1024];
int n = 0;
while ((n = fis.read(b)) != -1) {
zos.write(b, 0, n);
}
zos.flush();
fis.close();
}
zos.setComment("成功" + rt + str);
zos.flush();
zos.close();
} /**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
} }

到这里已经完成了对文件的上传下载功能,如有需要可以加我Q群【308742428】大家一起讨论技术

下一篇我将继续为大家分享 如何实现文件的在线预览功能,希望大家期待

喜欢的朋友可以关注下,粉丝也缺。

java实现文件上传下载的更多相关文章

  1. CentOS下安装配置NFS并通过Java进行文件上传下载

    1:安装NFS (1)安装 yum install nfs-utils rpcbind (2)启动rpcbind服务 systemctl restart rpcbind.service 查看服务状态 ...

  2. java web 文件上传下载

    文件上传下载案例: 首先是此案例工程的目录结构:

  3. java+大文件上传下载

    文件上传下载,与传统的方式不同,这里能够上传和下载10G以上的文件.而且支持断点续传. 通常情况下,我们在网站上面下载的时候都是单个文件下载,但是在实际的业务场景中,我们经常会遇到客户需要批量下载的场 ...

  4. FasfDFS整合Java实现文件上传下载

    文章目录     一 : 添加配置文件     二 : 加载配置文件         1. 测试加载配置文件         2. 输出配置文件     三:功能实现         1.初始化连接信 ...

  5. Java web文件上传下载

    [版权申明:本文系作者原创,转载请注明出处] 文章出处:http://blog.csdn.net/sdksdk0/article/details/52048666 作者:朱培 ID:sdksdk0 邮 ...

  6. fastDFS与java整合文件上传下载

    准备 下载fastdfs-client-java源码 源码地址 密码:s3sw 修改pom.xml 第一个plugins是必需要的,是maven用来编译的插件,第二个是maven打源码包的,可以不要. ...

  7. java 实现文件上传下载以及查看

    项目的目录结构 代码  IOUtils.java package cn.edu.zyt.util; import java.io.IOException; import java.io.InputSt ...

  8. Jsch - java SFTP 文件上传下载

    使用Jsch上传.下载文件,核心步骤是:获取channel,然后使用get/put方法下载.上传文件 核心代码句: session = jSch.getSession(ftpUserName, ftp ...

  9. FasfDFS整合Java实现文件上传下载功能实例详解

    https://www.jb51.net/article/120675.htm 在上篇文章给大家介绍了FastDFS安装和配置整合Nginx-1.13.3的方法,大家可以点击查看下. 今天使用Java ...

随机推荐

  1. 2018.11.06 bzoj1912: [Apio2010]patrol 巡逻(树形dp)

    传送门 一道挺妙的题啊. 对于K==1K==1K==1的直接求树的直径. 对于K==2K==2K==2的先求一次直径,然后考虑到如果两条边加进去形成的两个环重叠就会有负的贡献. 因此把之前那条直径上的 ...

  2. 2018.10.29 bzoj3718: [PA2014]Parking(树状数组)

    传送门 显然只用判断两个会相交的车会不会卡住就行了. 直接树状数组维护后缀最大值就行了. 代码: #include<bits/stdc++.h> using namespace std; ...

  3. sqlserver 修改数据库表所有者

    SQLServer修改表所有者  来自:http://www.cnblogs.com/tearer/archive/2012/09/16/2687802.html 批量修改:EXEC sp_MSfor ...

  4. ACM-ICPC 2018 徐州赛区网络预赛 A Hard to prepare

    https://nanti.jisuanke.com/t/31453 题目大意: 有n个人坐成一圈,然后有\(2^k\)种颜色可以分发给每个人,每个人可以收到相同的颜色,但是相邻两个人的颜色标号同或不 ...

  5. linux学习--查看操作系统版本及cpu及内存信息

    查看版本当前操作系统内核信息 uname -a 查看当前操作系统版本信息 cat  /proc/version 查看物理cpu个数: cat /proc/cpuinfo| grep "phy ...

  6. C++ cout

    cout.flush() cout.put() 输出一个字符 char* p = "hello"; cout.write(p,sttrlen(q)-3) 输出字符串,能够选定长度. ...

  7. 安装SourceTree遇到的一个个坑

    之前在公司的电脑上满心欢喜的安装了下,很顺利就成功了,回来在自己电脑上安装,结果坑不能停,以此来纪念下吧! 下载完成后,进行安装: 这里我是申请了个账户,选第一个user an existing ac ...

  8. arguments[0]()的详解

    var length = 10; function fn(){ console.log(this.length); } var obj = { length:5, method:function(fn ...

  9. java编程IO简单回顾和学习

    java编程IO操作必不可少的,很久不玩IO,回顾一下,写了几个小程序,记录一下,方便查阅和学习. 1.给出一个整数数组,将其写入一个文件,再从文件中读出,并按整数大小逆序打印. package co ...

  10. python科学计算模块NumPy

    NumPy是Numerical Python的简称,是高性能科学计算和数据分析的基础包.其实NumPy 本身并并没有提供太多的高级的数据分析功能, 但是理解NumPy数组以及面向数组的计算将有利于你更 ...