亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

Java上傳文件到服務器端的方法

2024-07-13 10:16:33
字體:
來源:轉載
供稿:網友

Web文件上傳采用POST的方式,與POST提交表單不同的是,上傳文件需要設置FORM的enctype屬性為multipart/form-data.由于上傳的文件會比較大,因此需要設置該參數指定瀏覽器使用二進制上傳。如果不設置,enctype屬性默認為application/x-www-form-urlencoded,使用瀏覽器將使用ASCII向服務器發送數據,導致發送文件失敗。

上傳文件要使用文件域(<input type='file'/>,并把FORM的Enctype設置為multipart/form-data.

客戶端上傳頁面如圖所示:

Java,上傳文件,服務器端,Java上傳文件到服務器,Java上傳文件

代碼如下:

upload.html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>上傳文件</title><meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="this is my page"><meta http-equiv="content-type" content="text/html; charset=UTF-8"><link rel="stylesheet" type="text/css" href="css/style.css"></head><body><form action="servlet/UploadServlet" method="post" enctype="multipart/form-data"><div align="center"><br/> <fieldset style="width:90%"> <legend>上傳文件</legend><br/> <div class='line'> <div align='left' class="leftDiv">上傳文件一</div> <div align='left' class="rightDiv"> <input type="file" name="file1" class="text"> </div> </div> <div class='line'> <div align='left' class="leftDiv">上傳文件二</div> <div align='left' class="rightDiv"> <input type="file" name="file2" class="text"> </div> </div> <div class='line'> <div align='left' class="leftDiv">上傳文件說明一</div> <div align='left' class="rightDiv"><input type="text" name="description1" class="text"></div> </div> <div class='line'> <div align='left' class="leftDiv">上傳文件說明二</div> <div align='left' class="rightDiv"><input type="text" name="description2" class="text"></div> </div> <div class='line'> <div align='left' class="leftDiv"></div> <div align='left' class="rightDiv"><br/> <input type="submit" value=" 上傳文件 " class="button"> </div> </div> </fieldset></div></form></body></html>

客戶端運行的代碼很簡單,服務器要復雜一點。要想獲取其中的內容,必須根據HTTP協議所規定的格式來解析瀏覽器提交的Request.

解析二進制流比較麻煩。已經有許多類庫已經完成了這項工作,例如SmartUpload與Apache Commons Fileupload.SmartUpload是一個商業類庫,解析Request過程中數據存放在內存里,因此速度較快,但上傳較大文件時會發生內存溢出。Apache Commons Fileupload是一個免費的開源的類庫。一些框架比如Struts里集成了Apache Common Fileupload類庫來實現文件上傳。

如圖所示:

Java,上傳文件,服務器端,Java上傳文件到服務器,Java上傳文件

代碼如下:

package com.helloweenvsfei.servlet;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.io.PrintWriter;import java.net.URLEncoder;import java.util.List;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.commons.fileupload.DiskFileUpload;import org.apache.commons.fileupload.FileItem;import org.apache.commons.fileupload.FileUploadException;public class UploadServlet extends HttpServlet { private static final long serialVersionUID = 7523024737218332088L; public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setCharacterEncoding("UTF-8"); response.getWriter().println("請以 POST 方式上傳文件"); } @SuppressWarnings("unchecked") public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { File file1 = null, file2 = null; String description1 = null, description2 = null; response.setCharacterEncoding("UTF-8"); response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<!DOCTYPE HTML PUBLIC /"-//W3C//DTD HTML 4.01 Transitional//EN/">"); out.println("<HTML>"); out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>"); out.println(" <link rel='stylesheet' type='text/css' href='../css/style.css'>"); out.println(" <BODY>"); out.println("<div align=center><br/>"); out.println("<fieldset style='width:90%'><legend>上傳文件</legend><br/>"); out.println(" <div class='line'>"); out.println(" <div align='left' class='leftDiv'>上傳日志:</div>"); out.println(" <div align='left' class='rightDiv'>"); // 使用 DiskFileUpload 對象解析 request DiskFileUpload diskFileUpload = new DiskFileUpload(); try { // 將 解析的結果 放置在 List 中 List<FileItem> list = diskFileUpload.parseRequest(request); out.println("遍歷所有的 FileItem ... <br/>"); // 遍歷 list 中所有的 FileItem for(FileItem fileItem : list){ if(fileItem.isFormField()){  // 如果是 文本域  if("description1".equals(fileItem.getFieldName())){  // 如果該 FileItem 名稱為 description1  out.println("遍歷到 description1 ... <br/>");  description1 = new String(fileItem.getString().getBytes(), "UTF-8");  }  if("description2".equals(fileItem.getFieldName())){  // 如果該 FileItem 名稱為 description2  out.println("遍歷到 description2 ... <br/>");  description2 = new String(fileItem.getString().getBytes(), "UTF-8");  } } else{  // 否則,為文件域  if("file1".equals(fileItem.getFieldName())){  // 客戶端文件路徑構建的 File 對象  File remoteFile = new File(new String(fileItem.getName().getBytes(), "UTF-8"));  out.println("遍歷到 file1 ... <br/>");  out.println("客戶端文件位置: " + remoteFile.getAbsolutePath() + "<br/>");  // 服務器端文件,放在 upload 文件夾下  file1 = new File(this.getServletContext().getRealPath("attachment"), remoteFile.getName());  file1.getParentFile().mkdirs();  file1.createNewFile();  // 寫文件,將 FileItem 的文件內容寫到文件中  InputStream ins = fileItem.getInputStream();  OutputStream ous = new FileOutputStream(file1);  try{  byte[] buffer = new byte[1024];   int len = 0;  while((len=ins.read(buffer)) > -1)  ous.write(buffer, 0, len);  out.println("已保存文件" + file1.getAbsolutePath() + "<br/>");  }finally{  ous.close();  ins.close();  }  }  if("file2".equals(fileItem.getFieldName())){  // 客戶端文件路徑構建的 File 對象  File remoteFile = new File(new String(fileItem.getName().getBytes(), "UTF-8"));  out.println("遍歷到 file2 ... <br/>");  out.println("客戶端文件位置: " + remoteFile.getAbsolutePath() + "<br/>");  // 服務器端文件,放在 upload 文件夾下  file2 = new File(this.getServletContext().getRealPath("attachment"), remoteFile.getName());  file2.getParentFile().mkdirs();  file2.createNewFile();  // 寫文件,將 FileItem 的文件內容寫到文件中  InputStream ins = fileItem.getInputStream();  OutputStream ous = new FileOutputStream(file2);  try{  byte[] buffer = new byte[1024];   int len = 0;  while((len=ins.read(buffer)) > -1)  ous.write(buffer, 0, len);  out.println("已保存文件" + file2.getAbsolutePath() + "<br/>");  }finally{  ous.close();  ins.close();  }  } } } out.println("Request 解析完畢"); } catch (FileUploadException e) { // TODO Auto-generated catch block e.printStackTrace(); } out.println(" </div>"); out.println(" </div>"); if(file1 != null){ out.println(" <div class='line'>"); out.println(" <div align='left' class='leftDiv'>file1:</div>"); out.println(" <div align='left' class='rightDiv'>"); out.println(" <a href='" + request.getContextPath() + "/attachment/" + file1.getName() + "' target=_blank>" + file1.getName() + "</a>" ); out.println(" </div>"); out.println(" </div>"); } if(file2 != null){ out.println(" <div class='line'>"); out.println(" <div align='left' class='leftDiv'>file2:</div>"); out.println(" <div align='left' class='rightDiv'>"); out.println(" <a href='" + request.getContextPath() + "/attachment/" + URLEncoder.encode(file2.getName(), "UTF-8") + "' target=_blank>" + file2.getName() + "</a>" ); out.println(" </div>"); out.println(" </div>"); } out.println(" <div class='line'>"); out.println(" <div align='left' class='leftDiv'>description1:</div>"); out.println(" <div align='left' class='rightDiv'>"); out.println(description1); out.println(" </div>"); out.println(" </div>"); out.println(" <div class='line'>"); out.println(" <div align='left' class='leftDiv'>description2:</div>"); out.println(" <div align='left' class='rightDiv'>"); out.println(description2); out.println(" </div>"); out.println(" </div>"); out.println("</fieldset></div>"); out.println(" </BODY>"); out.println("</HTML>"); out.flush(); out.close(); }}

程序運行效果如圖所示:

Java,上傳文件,服務器端,Java上傳文件到服務器,Java上傳文件

 

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩av一区二区在线| 欧美一级大片在线免费观看| 精品亚洲aⅴ在线观看| 一区二区三区视频在线| 在线色欧美三级视频| 色久欧美在线视频观看| 国产精品高潮粉嫩av| 91极品视频在线| 九九热精品视频国产| 91免费精品国偷自产在线| 国产精品久久久久久久午夜| 国产精品欧美日韩一区二区| 成人在线激情视频| 久久夜色精品国产亚洲aⅴ| 成人免费淫片aa视频免费| 亚洲在线观看视频网站| 国产亚洲人成网站在线观看| 欧美三级欧美成人高清www| 黑人巨大精品欧美一区二区三区| 欧美高清理论片| 久久精品一本久久99精品| 日韩精品免费在线| 国产精品久久久久久久av大片| 精品成人69xx.xyz| 日本免费久久高清视频| 欧美极品少妇全裸体| 97国产精品视频人人做人人爱| 成年无码av片在线| 国产精品丝袜一区二区三区| 欧美成年人网站| 国产精品青草久久久久福利99| 欧美成在线观看| 久久久成人精品| 欧美在线一级视频| 成人国产在线激情| 浅井舞香一区二区| 夜夜嗨av色综合久久久综合网| 欧美中文在线观看| 中文字幕亚洲情99在线| 日本久久久久久久久| 国产精品久久久久影院日本| 国产精品91免费在线| 日韩精品中文字幕视频在线| 欧美性高跟鞋xxxxhd| 久久夜色精品国产亚洲aⅴ| 人妖精品videosex性欧美| 欧美亚洲激情在线| 亚洲天天在线日亚洲洲精| 成人激情在线播放| 91久久久亚洲精品| 久久久久久久网站| 精品国产精品自拍| 国产精品久久久久7777婷婷| 精品自在线视频| 国产99久久精品一区二区永久免费| 69国产精品成人在线播放| 热久久这里只有精品| 久久精品色欧美aⅴ一区二区| 欧美成人黑人xx视频免费观看| 国产一区二区三区精品久久久| 欧美大成色www永久网站婷| 亚洲天堂av图片| 亚洲精品二三区| 国产日韩在线亚洲字幕中文| 在线播放日韩欧美| 久久久久久av| 亚洲第一福利视频| 成人女保姆的销魂服务| 91亚洲精品视频| 黑人狂躁日本妞一区二区三区| 精品视频在线播放免| 色悠久久久久综合先锋影音下载| 国产精品成人一区二区三区吃奶| 亚洲天堂av女优| 91精品国产免费久久久久久| 日本一区二区三区四区视频| 亚洲最新av在线| 午夜免费久久久久| 91免费在线视频网站| 九九九久久国产免费| 麻豆国产va免费精品高清在线| 亚洲精品国偷自产在线99热| 国产欧美婷婷中文| 欧美小视频在线| 久久av在线看| 国产成人精品久久亚洲高清不卡| 午夜精品视频网站| 国产精品久久久久福利| 国产欧美精品在线播放| 在线观看日韩专区| 精品国产一区二区三区久久| 国产精品无码专区在线观看| 91在线精品视频| 久久成人综合视频| 中文字幕日韩av| 亚洲第一区在线观看| 日韩精品一二三四区| 久久久久免费视频| 国产精品十八以下禁看| 狠狠色狠狠色综合日日小说| 欧美又大粗又爽又黄大片视频| www.亚洲一区| 国产国产精品人在线视| 成人a在线观看| 亚洲精品免费av| 久久久久免费精品国产| 中文字幕少妇一区二区三区| 国产精品视频免费在线| 国产精品极品美女在线观看免费| 亚洲黄色免费三级| 亚洲美腿欧美激情另类| 日韩中文字幕在线视频| 亚洲精品中文字| 欧美成人在线影院| 国产成人一区二| 亚洲二区在线播放视频| 精品亚洲夜色av98在线观看| 国产精品一二三视频| 国产主播在线一区| 美女视频久久黄| 一区二区三区动漫| 国产日本欧美一区| 国产丝袜一区二区三区| 国产97在线|日韩| 成人福利视频在线观看| 精品视频一区在线视频| 欧美性猛交xxxx免费看漫画| 精品视频在线观看日韩| 久久91精品国产| 91在线观看免费观看| 欧美成人免费小视频| 国产精品日本精品| 亚洲色图18p| 亚洲精品美女久久久久| 91精品免费视频| 成人午夜在线视频一区| 欧美怡红院视频一区二区三区| 国产91精品青草社区| 91视频九色网站| 久久久久久综合网天天| 2019国产精品自在线拍国产不卡| 色妞欧美日韩在线| 97视频在线观看网址| 国产国语videosex另类| 成人夜晚看av| 欧美精品videossex性护士| 亚洲石原莉奈一区二区在线观看| 久久人体大胆视频| 亚洲成人久久一区| 日韩欧美在线中文字幕| 一区二区三区视频观看| 日韩精品免费在线| 国产日韩中文字幕| 亚洲一区二区精品| 日韩电影中文字幕在线观看| 亚洲欧美中文字幕在线一区| 国产精品成人播放| 久久伊人精品一区二区三区| 日韩美女免费观看| 成人有码在线视频| 色综合天天狠天天透天天伊人| 亚洲精品黄网在线观看| 国产视频精品va久久久久久| 日产精品99久久久久久|