国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|JavaScript|易語言|

服務(wù)器之家 - 編程語言 - Java教程 - 基于Java文件輸入輸出流實(shí)現(xiàn)文件上傳下載功能

基于Java文件輸入輸出流實(shí)現(xiàn)文件上傳下載功能

2021-04-24 10:44糖拌西紅柿 Java教程

這篇文章主要為大家詳細(xì)介紹了基于Java文件輸入輸出流實(shí)現(xiàn)文件上傳下載功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文為大家分享了java實(shí)現(xiàn)文件上傳下載功能的具體代碼,供大家參考,具體內(nèi)容如下

前端通過form表單的enctype屬性,將數(shù)據(jù)傳遞方式修改為二進(jìn)制”流“的形式,服務(wù)端(servlet)通過  getinputstream() 獲取流信息, 運(yùn)用java i/o 流的基礎(chǔ)操作將流寫入到一個(gè)服務(wù)端臨時(shí)創(chuàng)建的文件temp中,然后再次利用文件基本操作,讀取并截取臨時(shí)文件內(nèi)容,根據(jù)其中信息創(chuàng)建相應(yīng)的文件,將讀取出來的具體信息寫入,下載時(shí),根據(jù)提交的文件名稱,找到服務(wù)器端相應(yīng)的文件,然后根據(jù)輸出流outstream輸出到頁面,同時(shí)將servlet的響應(yīng)類型和響應(yīng)頭進(jìn)行設(shè)置。

基于Java文件輸入輸出流實(shí)現(xiàn)文件上傳下載功能

具體傳輸流程如下圖:

基于Java文件輸入輸出流實(shí)現(xiàn)文件上傳下載功能

流信息的部分為:

基于Java文件輸入輸出流實(shí)現(xiàn)文件上傳下載功能

具體代碼如下:

前端代碼:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>insert title here</title>
<script src="js/jquery.js"></script>
</head>
<body>
 <form action="fileupservlet" method="post" enctype="multipart/form-data">
 <table>
 <tr>
  <td>請選擇上傳文件:</td><td><input id="myfile" name="myfile" type="file" value="" /></td>
  <td><input type="submit" value="上傳"></td>
 </tr>
 <tr><td>${info}</td></tr>
 </table>
 </form>
  文件下載:<a href="fileloadownservlet?filename=${filename}">${filename}</a>
</body>
</html>

上傳servlet部分(核心)

?
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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
@webservlet("/fileupservlet")
public class fileupservlet extends httpservlet {
 private static final long serialversionuid = 1l;
  
 /**
  * @see httpservlet#httpservlet()
  */
 public fileupservlet() {
  super();
  // todo auto-generated constructor stub
 }
 
 /**
  * @see httpservlet#doget(httpservletrequest request, httpservletresponse response)
  */
 protected void doget(httpservletrequest request, httpservletresponse response) throws servletexception, ioexception {
  // todo auto-generated method stub
  dopost(request, response);
 }
 
 /**
  * @see httpservlet#dopost(httpservletrequest request, httpservletresponse response)
  */
 protected void dopost(httpservletrequest request, httpservletresponse response) throws servletexception, ioexception {
  // todo auto-generated method stub
  request.setcharacterencoding("utf-8");
  inputstream filesource = request.getinputstream();//request獲取流信息
  string tempname = "d:/temp";//tempfile代表臨時(shí)存放文件
  file tempfile = new file(tempname);//創(chuàng)建臨時(shí)文件
  
  fileoutputstream outputstream = new fileoutputstream(tempfile);//輸出流對象,指定輸出指tempfile目錄下
  byte b[] = new byte[1024];
  int n;
  while((n = filesource.read(b))!= -1)//從輸出流中每次讀取1024字節(jié),直至讀完
  {
   outputstream.write(b,0,n);
  }
  outputstream.close();
  filesource.close();//關(guān)閉輸入輸出流
  
  
  /*以下為具體的文件操作,主要為解析臨時(shí)產(chǎn)生的 temp文件 ,知識多為java輸入輸出流的內(nèi)容!*/
  
 
  randomaccessfile randomfile = new randomaccessfile(tempfile, "r");//隨機(jī)流,指定要讀臨時(shí)文件,只讀
  randomfile.readline();//讀取第一行,無效數(shù)據(jù),不需要
  string str = randomfile.readline();//讀取第二行
  int beginindex = str.lastindexof("=")+2;//指定所需數(shù)據(jù)的開始位置
  int endindex = str.lastindexof("\"");//指定所需數(shù)據(jù)截至位置
  string filename = str.substring(beginindex,endindex);//截取文件名
  
  //重新定位文件指針,獲取文件內(nèi)容
  randomfile.seek(0);//文件指針從頭開始
  long startext = 0;
  int i = 1;
  //文件內(nèi)容開始位置
  while((n=randomfile.readbyte()) != -1&&i <= 4)
  {
   if(n=='\n')
   {
    startext = randomfile.getfilepointer();
    i++;
   }
  }
  startext = randomfile.getfilepointer() - 1;
  //獲取文件內(nèi)容 結(jié)束位置
  randomfile.seek(randomfile.length());
  long endtext = randomfile.getfilepointer();
  int j = 1;
  while(endtext >= 0 && j <= 2)
  {
   endtext--;
   randomfile.seek(endtext);
   if(randomfile.readbyte()=='\n')
   {
    j++;
   }
  }
  endtext = endtext-1;
  
  //將臨時(shí)文件保存至指定目錄中
  string realpath = getservletcontext().getrealpath("/")+"images";//設(shè)置文件保存目錄
  system.out.println(realpath);
  file fileupload = new file(realpath);
  if(!fileupload.exists())
  {
   fileupload.mkdir();//目錄不存在則創(chuàng)建
  }
  file savefile = new file(realpath,filename);
  randomaccessfile randomaccessfile = new randomaccessfile(savefile, "rw");
  randomfile.seek(startext);
  while(startext<endtext){
   randomaccessfile.write(randomfile.readbyte());//文件寫入
   startext = randomfile.getfilepointer();
  }
  //關(guān)閉各種輸入輸出流
  randomaccessfile.close();
  randomfile.close();
  tempfile.delete();//刪除臨時(shí)文件
  
  
  simpledateformat timed = new simpledateformat("yyyy-mm-dd hh:mm:ss");
  date nowdate = new date();
  string time = timed.format(nowdate.gettime());
  request.setattribute("info", time+" "+filename+"上傳成功!");
  request.setattribute("filename", filename);
  request.getrequestdispatcher("/fildeop.jsp").forward(request, response);
 }
 
}

下載部分

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
protected void dopost(httpservletrequest request, httpservletresponse response) throws servletexception, ioexception {
  // todo auto-generated method stub
  string filename = request.getparameter("filename");
  string path = getservletcontext().getrealpath("/")+"images/";
  file file = new file(path+filename);//找到文件
  if(file.exists())
  {
   response.setcontenttype("application/x-msdownload"); //設(shè)置響應(yīng)類型,此處為下載類型
   response.setheader("content-disposition", "attachment;filename=\""+filename+"\"");//以附件的形式打開
   inputstream inputstream = new fileinputstream(file);
   servletoutputstream outputstream = response.getoutputstream();
   byte b[] = new byte[1024];
   int n;
   while((n = inputstream.read(b)) != -1)
   {
    outputstream.write(b,0,n);
   }
   outputstream.close();
   inputstream.close();  
   }else{
   request.setattribute("result", "文件不存在!下載失敗!");
   request.getrequestdispatcher("/fildeop.jsp").forward(request, response);
  }
 }

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持服務(wù)器之家。

原文鏈接:https://www.cnblogs.com/TheGCC/archive/2018/04/26/8951774.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 成人欧美一区二区三区视频xxx | 新91在线| 午夜成人影视 | 亚洲一区二区三区在线视频 | 久久久国产一区二区三区四区小说 | 探花av在线| 亚洲国产高清高潮精品美女 | 亚洲精选一区二区 | 日韩高清在线 | 久久久久久久成人 | 国产99久久 | 精品久久久久久久久久久 | 久久精品国产一区二区三区 | 99re在线精品 | www.午夜 | 成人日韩 | 国内精品三级 | 国产精品久久久久国产精品 | 日韩精品一区二区三区在线 | 人人叉人人 | 久久国产精品久久久久久电车 | 日本欧美在线 | 色影视| 一区二区三区四区日韩 | 国产精品a久久久久 | 久久人爽 | av毛片| 午夜国产精品视频 | 亚洲欧美国产另类 | 国产精品国产三级国产aⅴ 成人在线免费看 | 亚洲综合自拍 | 国产视频网 | 午夜免费影视 | 99riav在线| 亚洲欧洲免费视频 | 综合久| 91精品国产乱码久久久久久久久 | 免费毛片黄色视频 | 亚洲精品乱码久久久久久久久 | 日本中文一区二区 | 国产精品免费久久久久久 |