java实现文件上传和下载

网友投稿 306 2022-11-30

java实现文件上传和下载

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

文件的上传

upload:文件上传

客户端通过表单的文件域file  把客户端的文件 上传保存到服务器的硬盘上

页面

首先对上传的表单有以下要求:

必须有文件域:input type=file

表单提交方式:method=post

表单的 enctype=multipart/form-data

Servlet

1)首先要导入以下两个jar包,通过commons-fileupload实现文件上传

2)创建一个工厂对象DiskFileItemFactory,在创建一个多部件表单解析器ServletFileUpload,构造方法传入工厂对象

3)解析器解析请求对象,获得一个list集合,其中list集合存储的是一个一个的fileItem对象,一个fileItem对应一个组件,也就是一个

4) 遍历集合用isFormField()方法判断是否为普通组件,然后着重处理文件域组件

5)获取文件名,并用getRealPath方法获取服务器上传文件所在路径,创建新文件夹

6)获取输入流和创建输出流,进行文件的读写

@WebServlet(value = "/user/regist")

public class UploadServlet extends HttpServlet {

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

//创建一个工厂对象

DiskFileItemFactory factory = new DiskFileItemFactory();

//创建一个多部件解析器对象

ServletFileUpload fileUpload = new ServletFileUpload(factory);

User user = new User();

FileOutputStream out=null;

try {

//用解析器对象解析请求,返回一个FileItem类型的集合

List list = fileUpload.parseRequest(req);

for (FileItem fileItem : list) {

/**

* fileItem.getFieldName());:::获取组件的name值

* fileItem.getName());::::获取文件域的文件名

* fileItem.getSize());::::获取数据的字节个数

* fileItem.getString());::::获取数据的字符串

* fileItem.isFormField());:::判断是否为普通组件

*/

//判断部件是否为普通组件

if (fileItem.isFormField()) {//普通组件

//获取组件名字也就是name的值

String fieldName = fileItem.getFieldName();

//获取组件的值也就是value的值

String value = fileItem.getString("utf-8");

if ("username".equals(fieldName)) { //设置实体类的属性

user.setUsername(value);

} else if ("password".equals(fieldName)) {

user.setPassword(value);

}

} else {// 文件域

//获取文件名

String fielName = fileItem.getName();

//输入流来读数据

InputStream in = fileItem.getInputStream();

//设置文件写出的路径,并用随机码来保证图片可以重复

String path=req.getServletContext().getRealPath("/imgs/"+ UUID.randomUUID()+fielName);

System.out.println("文件路径为:"+path);

File http://file = new File(path);

out = new FileOutputStream(file);

//利用commons-io-1.4.jar的IOUtils的copy方法直接实现文件的复制

IOUtils.copy(in,out);

user.setPhoto(file.getName());

}

}

} catch (Exception e) {

e.printStackTrace();

}finally {

if(out!=null){

out.close();

}

}

req.getSession().setAttribute("user",user);

req.getRequestDispatcher("/sucess.jsp").forward(req,resp);

}

}

文件的下载

页面

只需一个超链接,传需要下载的文件名,或者直接输入路径在浏览器

例: 狗狗1

Servlet

1)接收参数,获取文件名

2)获取imgs的路径,也就是存储文件的文件夹的路径,然后创建文件,传入该路径和文件名

3)创建输入流读取文件

4)设置响应头,首先根据文件名字获取文件的大类型,设置响应头Content-Type指定响应的类型;设置响应头Content-Disposition,指定文件以附件形式保存到本地磁盘

5)用响应获取输出流,读出文件到客户端

@WebServlet("/user/download")

public class DownloadServlet extends HttpServlet {

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

request.setCharacterEncoding("UTF-8");

//获取要下载的文件名

String fileName = request.getParameter("fileName");

System.out.println(fileName);

//获取服务器中存储图片的文件夹的路径

String path1 = request.getServletContext().getRealPath("/imgs");

String path=path1+"/"+fileName;

File file = new File(path);

//创建输入流读文件

FileInputStream in = new FileInputStream(file);

//通过文件名字获取文件的大类型

String type = requetlVsNist.getServletContext().getMimeType(fileName);

//设置响应头ContentType指定响应内容的类型

response.setHeader("Content-type",type);

//设置响应头Content-Disposition 指定以附件形式保存响应的信息

response.setHeader("Content-Disposition","attachment;filename="+(URLEncoder.encode(fileName, "utf-8")));

ServletOutputStream out = response.getOutputStream();

//实现文件的读写

IOUtils.copy(in,out);

if(in!=null){

in.close();

}

}

}

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:linux下面没有tree命令
下一篇:基于MATLAB的BP神经网络进行语音特征信号分类
相关文章

 发表评论

暂时没有评论,来抢沙发吧~