欧美三级国产三级日韩三级_亚洲熟妇丰满大屁股熟妇_欧美亚洲成人一区二区三区_国产精品久久久久久模特

Java Web開發(fā)中文件的上傳與下載 - 新聞資訊 - 云南小程序開發(fā)|云南軟件開發(fā)|云南網(wǎng)站建設-昆明葵宇信息科技有限公司

159-8711-8523

云南網(wǎng)建設/小程序開發(fā)/軟件開發(fā)

知識

不管是網(wǎng)站,軟件還是小程序,都要直接或間接能為您產(chǎn)生價值,我們在追求其視覺表現(xiàn)的同時,更側(cè)重于功能的便捷,營銷的便利,運營的高效,讓網(wǎng)站成為營銷工具,讓軟件能切實提升企業(yè)內(nèi)部管理水平和效率。優(yōu)秀的程序為后期升級提供便捷的支持!

您當前位置>首頁 » 新聞資訊 » 網(wǎng)站建設 >

Java Web開發(fā)中文件的上傳與下載

發(fā)表時間:2019-8-7

發(fā)布人:葵宇科技

瀏覽次數(shù):46

如何實現(xiàn)文件的上傳

實現(xiàn)Web開發(fā)中文件上傳功能的兩個步驟:

  • 在Web頁面添加上傳輸入項
  • 在Servlet中讀取上傳文件的數(shù)據(jù)并保存到本地硬盤中

由于大多數(shù)文件的上傳都是通過表單 的形式提交給服務器的,故需要先創(chuàng)建一個用于提交上傳文件的表單頁面。
實現(xiàn)文件上傳的表單頁面需如下配置:

  1. 首先要創(chuàng)建一個用于提交上傳文件的表單頁面
  2. 在頁面中,需要使用 < input type=“file”> 標簽在Web頁面中添加文件上傳輸入項
  3. 必須要設置input輸入項的name屬性,否則瀏覽器將不會發(fā)送上傳文件的數(shù)據(jù)
  4. 必須把將表單頁面的method屬性設置為post方式,enctype屬性設置為 “multipart/form-data” 類型。
    示例代碼:
    <%--指定表單的enctype屬性以及提交方式--%>
    <form enctype="multipart/form-data" method="post">
    	<%--指定標記的類型和文件域的名稱--%>
    	選擇上傳文件:< inpurt type="file" name="myfile"/><br />
    </form>

Apache組織提供一個開源組件Commons-FileUpload,可以方便的將 “multipart/form-data” 類型請求中的各種表單域解析出來,并實現(xiàn)一個或多個文件的上傳,同時也可以限制上傳文件的大小等內(nèi)容。使用時需要導入commons-fileupload.jarcommons-io.jar兩個JAR包,可去官網(wǎng):"http://commons.apache.org/"下載(在網(wǎng)址頁面Apache Commons Proper下方表格的Components列中的FileUpload和IO)。

如何實現(xiàn)文件的下載

實現(xiàn)文件下載不需要使用第三方組件,直接使用Servlet類和輸入/輸出流即可。
與訪問服務器文件不同的是,要實現(xiàn)文件的下載,不僅需要指定文件的路徑,還需要在HTTP協(xié)議中設置兩個響應消息頭:

//設置接受程序處理方式
Content-Disposition:attachment;filename=
//設定實體內(nèi)容的MIME類型(多用途互聯(lián)網(wǎng)郵件擴展類型)
Content-Type:appliccation/x-msdownload

簡述文件下載的實現(xiàn)原理:
首先獲取下載文件的地址,并根據(jù)該地址創(chuàng)建文件字節(jié)輸入流,然后通過該流讀取下載文件內(nèi)容,最后將讀取的內(nèi)容通過輸出流寫到目標文件中。

實例問題一:

請按照以下要求設計一個實現(xiàn)文件上傳的類UploadServlet?
要求如下:
1) 已知form.html文件中form表單內(nèi)定義了一個名為name的文本框及名為myfile的文件域,具備文件上傳的前提條件。
2)在doPost()方法中,寫出文件上傳的相關(guān)代碼。
3)上傳的文件保存在當前應用程序的upload文件夾下。
解:UploadServlet代碼如下:

public class UploadServlet extends HttpServlet {
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		response.setContentType("text/html;charset=utf-8");
		try {			// 創(chuàng)建工廠
			DiskFileItemFactory factory = new DiskFileItemFactory();
			factory.setRepository(new File("e:\\Target"));
			ServletFileUpload fileupload = new ServletFileUpload(factory);			// 創(chuàng)建 fileupload 組件
			fileupload.setHeaderEncoding("utf-8");
			List<FileItem> fileitems = fileupload.parseRequest(request);			// 解析 request
			PrintWriter writer = response.getWriter();
			for (FileItem fileitem : fileitems) {			// 遍歷集合
				if (fileitem.isFormField()) {				// 判斷是否為普通字段
					String name = fileitem.getFieldName();					// 獲得字段名和字段值
					String value = fileitem.getString("utf-8");
				} else {					// 上傳的文件路徑
					String filename = fileitem.getName();
					writer.print("文件來源:" + filename + "<br>");
					filename = filename					// 截取出文件名
							.substring(filename.lastIndexOf("\\") + 1);
					writer.print("成功上傳的文件:" + filename + "<br>");
					filename = UUID.randomUUID().toString() + "_" + filename;				// 文件名需要唯一
					String webPath = "/upload/" + filename;					// 在服務器創(chuàng)建同名文件
					String path = getServletContext().getRealPath(webPath);
					File file = new File(path);					// 創(chuàng)建文件
					file.getParentFile().mkdirs();
					file.createNewFile();
					InputStream in = fileitem.getInputStream();					// 獲得上傳文件流
					OutputStream out = new FileOutputStream(file);			// 獲得寫入文件流
					byte[] buffer = new byte[1024];					// 流的對拷
					int len;
					while ((len = in.read(buffer)) > 0)
						out.write(buffer, 0, len);
					in.close();					// 關(guān)流
					out.close();
					fileitem.delete();					// 刪除臨時文件
				}
			}
		} catch (Exception e) {
			throw new RuntimeException(e);
		}
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet(request, response);
	}
}

實例問題二:

請編寫一個用于實現(xiàn)文件下載的程序,并且保證下載文件的文件名不能出現(xiàn)中文亂碼問題?
解:
該功能的實現(xiàn)步驟如下:
(1)創(chuàng)建下載頁面download.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>文件下載</title>
</head>
<body>
<a href="${pagContext.request.contextPath}/chapter06/DownloadServlet"}>
		文件下載
	</a>
	<br />
</body>
</html>

(2)編寫DownloadServlet類,該類主要用于設置所要下載的文件以及文件在瀏覽器中的打開方式,并使用 encode(String s, String enc) 方法,將URL中的字符串以指定的編碼形式輸出,防止文件名出現(xiàn)中文亂碼問題

import java.io.*;
import java.net.URLEncoder;
import javax.servlet.*;
import javax.servlet.http.*;
public class DownloadServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
         response.setContentType("text/html;charset=utf-8");
          // 獲得絕對路徑創(chuàng)建文件對象
         String path=getServletContext().getRealPath("/download/人物.jpg");
         File file=new File(path);
          // 通知瀏覽器以下載的方式打開文件
		response.addHeader("Content-Type", "application/octet-stream");
         response.addHeader("Content-Disposition","attachment;filename="
         +URLEncoder.encode(file.getName(),"utf-8"));
		InputStream in=new FileInputStream(file);         // 通過文件對象獲取文件相關(guān)的輸入流
		OutputStream out = response.getOutputStream();         // 獲取response對象的輸出流
         byte [] buffer=new byte[1024];
		int len;
		while((len=in.read(buffer))!=-1){
			out.write(buffer,0,len);
		}
	}
	public void doPost(HttpServletRequest req, HttpServletResponse  resp)
			throws ServletException, IOException {
		doGet(req, resp);
	}
}

(3)使用IE瀏覽器訪問該download.jsp,單擊頁面中的文件下載鏈接后,即可保存下載該文件

相關(guān)案例查看更多