java实现文件上传和下载

本文实例为大家分享了java实现文件上传和下载的具体代码,供大家参考,具体内容如下
文件的上传 upload:文件上传
客户端通过表单的文件域file把客户端的文件 上传保存到服务器的硬盘上
页面
首先对上传的表单有以下要求:

  • 必须有文件域:input type=file
  • 表单提交方式:method=post
  • 表单的 enctype=multipart/form-data
用户名
密码
用户头像

Servlet
1)首先要导入以下两个jar包,通过commons-fileupload实现文件上传
java实现文件上传和下载
文章图片

2)创建一个工厂对象DiskFileItemFactory,在创建一个多部件表单解析器ServletFileUpload,构造方法传入工厂对象
3)解析器解析请求对象,获得一个list集合,其中list集合存储的是一个一个的fileItem对象,一个fileItem对应一个组件,也就是一个
4) 遍历集合用isFormField()方法判断是否为普通组件,然后着重处理文件域组件
5)获取文件名,并用getRealPath方法获取服务器上传文件所在路径,创建新文件夹
6)获取输入流和创建输出流,进行文件的读写
@WebServlet(value = "https://www.it610.com/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 = https://www.it610.com/article/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 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 = request.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(); }}}

【java实现文件上传和下载】以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

    推荐阅读