gpt4 book ai didi

Java文件上传与文件下载实现方法详解

转载 作者:qq735679552 更新时间:2022-09-28 22:32:09 28 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章Java文件上传与文件下载实现方法详解由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

本文实例讲述了java文件上传与文件下载实现方法。分享给大家供大家参考,具体如下:

java文件上传 。

数据上传是客户端向服务器端上传数据,客户端向服务器发送的所有请求都属于数据上传。文件上传是数据上传的一种特例,指客户端向服务器上传文件。即将保存在客户端的文件上传一个副本到服务器,并保存在服务器中.

1、上传表单要求 。

  • 文件上传要求客户端提交特殊的请求——multipart请求,即包含多部分数据的请求。必须将<form/>标签的enctype属性值设为“multipart/form-data”,enctype表示encodingtype,及编码类型
  • 由于客户端上传文件的大小是不确定的,所以http协议规定,文件上传的数据要存放于请求正文中,不能出现在url地址栏内。也就是说,想要上传文件必须提交post请求。
  • 表单中要有<input type="file" />标签
  • 注意:multipart/form-data请求与普通请求不同

2、下载文件上传jar包并查看官方文档 。

打开apache官网http://www.apache.org/,选择apache project list中的commons 。

Java文件上传与文件下载实现方法详解

选择commons中的fileupload项目,并下载jar包和源文件 。

Java文件上传与文件下载实现方法详解

Java文件上传与文件下载实现方法详解

查看fileupload的工作方式 。

Java文件上传与文件下载实现方法详解

查看fileupload项目的api 。

Java文件上传与文件下载实现方法详解

3、使用第三方jar包上传文件 。

?
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
public class registerservlet extends httpservlet {
   private static final long serialversionuid = 1l;
   public registerservlet() {
     super ();
   }
   protected void doget(httpservletrequest request, httpservletresponse response)
     throws servletexception, ioexception {
     response.getwriter().append( "served at: " ).append(request.getcontextpath());
   }
   protected void dopost(httpservletrequest request, httpservletresponse response)
     throws servletexception, ioexception {
     //第一步、判断请求是否为multipart请求
     if (!servletfileupload.ismultipartcontent(request)) {
       throw new runtimeexception( "当前请求只支持文件上传" );
     }
     try {
       //第二步、创建fileitem工厂
       diskfileitemfactory factory = new diskfileitemfactory();
       //设置临时文件存储目录
       string path = this .getservletcontext().getrealpath( "/temp" );
       file temp = new file(path);
       factory.setrepository(temp);
       //单位:字节。本例设置边界值为2mb,超过该值会创建临时文件
       factory.setsizethreshold( 1024 * 1024 * 2 );
       //第三步、创建文件上传核心组件
       servletfileupload upload = new servletfileupload(factory);
       //设置item的头部字符编码,解决中文乱码问题
       upload.setheaderencoding( "utf-8" );
       //设置单个上传文件的最大值为5mb
       upload.setfilesizemax( 1024 * 1024 * 5 );
       //设置一次上传所有文件总和的最大值为10mb(上传多个文件时起作用)
       upload.setfilesizemax( 1024 * 1024 * 10 );
       //第四步、解析请求获取所有的item
       list<fileitem> items = upload.parserequest(request);
       //第五步、遍历item
       for (fileitem item:items) {
         if (item.isformfield()) {
             processformfield(item);
           } else {
             processuploadedfile(item);
           }
       }
     } catch (fileuploadexception e) {
       e.printstacktrace();
     }
   }
   private void processformfield(fileitem item) {
     try {
       string name = item.getfieldname();
       //解决中文乱码问题
       string value = item.getstring( "utf-8" );
       system.out.println(name+ "=" +value);
     } catch (unsupportedencodingexception e) {
       e.printstacktrace();
     }
   }
   private void processuploadedfile(fileitem item) {
     try {
       inputstream inputstream = item.getinputstream();
       string fieldname = item.getfieldname();
       //获取上传文件原始名称
       string filename = item.getname();
       //解决文件同名问题
       filename = system.currenttimemillis()+filename;
       string contenttype = item.getcontenttype();
       boolean isinmemory = item.isinmemory();
       long sizeinbytes = item.getsize();
       string path = this .getservletcontext().getrealpath( "/uploadcontent" );
       //date now = new date();
       calendar now = calendar.getinstance();
       //对上传的文件进行分类管理
       path += "/" +now.get(calendar.year)+ "/" +(now.get(calendar.month)+ 1 )+ "/" +now.get(calendar.day_of_month);
       //若目录不存在,则创建该目录
       file directory = new file(path);
       if (!directory.exists()) {
         directory.mkdirs();
       }
       file descfile = new file(path,filename);
       outputstream outputstream = new fileoutputstream(descfile);
       int length = - 1 ;
       byte [] buffer = new byte [ 1024 ];
       while ((length=inputstream.read(buffer))!=- 1 ) {
         outputstream.write(buffer, 0 , length);
       }
       outputstream.close();
       inputstream.close();
       //删除临时文件
       item.delete();
     } catch (ioexception e) {
       e.printstacktrace();
     }
   }
}

java文件下载 。

数据下载是客户端从服务器获取数据,服务器向客户端发送的所有响应都属于数据下载。文件下载是数据下载的一种特例,指客户端从服务器下载文件,即将保存在服务器的文件下载一个副本到客户端。通常我们对服务器所发出的请求,大多是文件下载请求,从服务器中下载文本、图片、声音、视频等文件,客户端浏览器对这些文件进行解析后,我们才能看到多媒体信息.

1、超链接下载 。

  • 浏览器能解析的文件会直接显示,如:pdf、jpg......
  • 浏览器解析不了的文件会被另存为,如:rar、exe......
  • 浏览器版本不一样,对文件的解析能力也不同
  • 缺点:下载内容的形式(直接显示/另存为)由浏览器决定,跟服务器无关

2、servlet方式下载 。

  • 设置响应头部属性content-disposition值为attachment
  • 获取连接服务器源文件的输入流
  • 获取输出流
  • 将输入流中的数据写到输出流中
?
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
public class downloadservlet extends httpservlet {
   private static final long serialversionuid = 1l;
   public downloadservlet() {
     super ();
   }
   protected void doget(httpservletrequest request, httpservletresponse response)
     throws servletexception, ioexception {
     //设置响应的头部属性content-disposition值为attachment
     //使用filename来指定文件名
     string filename = "超跑.png" ;
     byte [] bytes = filename.getbytes( "utf-8" );
     //http协议规定浏览器只能接受iso8859-1类型的字节数据
     filename = new string(bytes, "iso8859-1" );
     response.setheader( "content-disposition" , "attachment;filename=" +filename);
     //获取连接服务器资源文件的输入流
     inputstream is = request.getservletcontext().getresourceasstream( "/resources/bs架构原理图1.png" );
     //获取输出流
     servletoutputstream os = response.getoutputstream();
     //将输入流中的数据写到输出流中
     int length = - 1 ;
     byte [] buffer = new byte [ 1024 ];
     while ((length=is.read(buffer))!=- 1 ) {
       os.write(buffer, 0 ,length);
     }
     os.close();
     is.close();
   }
   protected void dopost(httpservletrequest request, httpservletresponse response)
     throws servletexception, ioexception {
     doget(request, response);
   }
}

希望本文所述对大家java程序设计有所帮助.

原文链接:https://blog.csdn.net/xiaouncle/article/details/80379322 。

最后此篇关于Java文件上传与文件下载实现方法详解的文章就讲到这里了,如果你想了解更多关于Java文件上传与文件下载实现方法详解的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com