JSP 文件上传下载系列之一[基本方式上传文件]
2013-08-07 18:50
381 查看
前言
在jsp的web项目中,很有可能会使用文件上传的功能。把一个本地的文件上传到web 服务器的某个路径下。
对于java 来说, 实现这样功能的开源组件有很多, 比如较常用的commons-fileupload , 等等....
但是不管哪种组件,底层的原理应该都是一致的。 所以本系列从基本的方式和原理入手。
选择文件的按钮标签
<input type="file" />这是一个HTML 的标签, 所以不管是ASP,JSP, PHP 使用的方式都是一样的。
此标签放在form 的标签里面,显示的效果是一个“选择文件”按钮, 点击之后会弹出一个文件选择的对话框。
此标签在不同的流量器中显示的效果可能会有不同(firefox和Chrome 的效果类似, 但是IE显示的效果就有差异。 )
当要在某个form 中添加 file 的标签时, form 的method 要设置成 “post”, enctype 设置成 "multipart/form-data",这样的话,在点击submit 提交时,
就会把文件的内容以数据流的形式放入页面的request 对象中。
配置类似:
<form action="BaseUpload.jsp" method="post" enctype="multipart/form-data"> Please Select File: <input type="file" name="upload" size="16"><br> <input type="submit" value="submit"> </form>
form 中 action的配置
action作用是form 中的数据抛到哪处理,处理之后返回什么。对于jsp 而言, action 可以直接配置成 .jsp 的文件,也可以配置成一个servlet;如果有使用spring , 还可以是一个 .do 或是 link 什么的。
这里为了方便,实例中先直接使用 .jsp 的方式。
实例
1. 这里使用eclipse 开发, 所以先通过eclipse 建立一个动态的web 项目。2. 在 WebContent 目录下建立,选择文件的页面 BaseUploadFile.jsp (后缀名也可以是.html)
<!-- Add By oscar999 -->
<!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>Insert title here</title>
</head>
<body>
<form action="BaseUpload.jsp" method="post" enctype="multipart/form-data"> Please Select File: <input type="file" name="upload" size="16"><br> <input type="submit" value="submit"> </form>
</body>
</html>
2. 在同目录下定义action 的jsp BaseUpload.jsp
<%@ page contentType="text/html;charset=UTF-8" %> <%@ page import="java.io.*" %> <% String sFileName = "tempfile.txt"; String sFilePath = "D:\\temp\\upload\\files\\"; ServletInputStream in = request.getInputStream(); //FileOutputStream outputStream = new FileOutputStream(sFilePath+sFileName); PrintWriter pw = new PrintWriter( new BufferedWriter(new FileWriter(sFilePath+sFileName))); int i = in.read(); while(i!=-1) { pw.print((char)i); i = in.read(); } pw.close(); in.close(); %>
这里的动作很简单, 就是把 request 的信息写入到一个txt 的文件中, 来验证一下是否如之前如之前所说,文件的内容会放入request 对象中。
3. 打包,部署 。测试。 查看产生的txt 文件内容
这里上传一个只有 "111" 这样的简单的 txt 文本。 在产生的文件中内容如下:
------WebKitFormBoundaryGsj8EiAn9BkPrhAf Content-Disposition: form-data; name="upload"; filename="111.txt" Content-Type: text/plain 111 ------WebKitFormBoundaryGsj8EiAn9BkPrhAf--
由此, 就可以从request 得到上传文件的内容, 通过流的方式就可以写入到服务端了。
补充
1. 针对以上 action 的 BaseUpload.jsp , 也可以使用以下方式:定义一个处理的java Bean, BaseUploadBean.java
/** * @author oscar999 * @date 2013-8-7 * @version V1.0 */ package com.oscar999; import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletInputStream; import javax.servlet.http.HttpServletRequest; public class BaseUploadBean { public void doUpload(HttpServletRequest request) throws IOException { String sFileName = "D:\\temp\\upload\\files\\tempfile.txt"; PrintWriter pw = new PrintWriter( new BufferedWriter(new FileWriter(sFileName))); ServletInputStream in = request.getInputStream(); int i = in.read(); while (i != -1) { pw.print((char) i); i = in.read(); } pw.close(); in.close(); } }
这样BaseUpload.jsp的内容就可以简化成:
<%@ page contentType="text/html;charset=UTF-8" %>
<%@ page import="java.io.*" %>
<jsp:useBean id="TheBean" scope="page" class="com.oscar999.BaseUploadBean" />
<%
TheBean.doUpload(request);
%>
2. 另外, action 使用servlet 的方式
现在web.xml 配置servlet
<servlet> <servlet-name>FileUploadServlet</servlet-name> <servlet-class>com.oscar999.FileUploadServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>FileUploadServlet</servlet-name> <url-pattern>/FileUploadServlet</url-pattern> </servlet-mapping>
然后在 dopost 方法中做类似的处理。
相关文章推荐
- JSP 文件上传下载系列之一[基本方式上传文件]
- JSP 文件上传下载系列之二[Commons fileUpload]
- JSP 文件上传下载系列之二[Commons fileUpload]
- JSP 文件上传下载系列之二[Commons fileUpload]
- 用JspSmart组件实现文件上传和下载
- FTP方式的文件上传和下载的Java代码
- BBS 设计思路系列 ---- 上传、下载文件、图片
- jsp文件上传而下载
- 用jspSmartUpload组件实现文件上传、下载
- xml文件加密上传和sftp下载解密基本思路
- JSP程序中response对象实现文件下载的两种方式
- jsp实现文件上传、下载
- java文件原生方式的上传和下载,适合新手学习
- Java 使用ftp的方式上传文件到linux,并实现删除,下载
- JSP文件下载的几种方式
- JAVA 文件上传下载笔记之使用基本IO流实现上传
- 项目开发技巧(四):使用JspSmartupload实现文件上传下载(一):JspSmart之upload组件源码及使用
- iOS开发中文件的上传和下载功能的基本实现
- Jsp+Servlet实现文件上传下载 文件列表展示(二)
- jsp实现文件下载方式