- 浏览: 1064842 次
- 性别:
- 来自: 南京
文章分类
- 全部博客 (501)
- dwr (6)
- javascript (84)
- oracle (66)
- jsp/servlet (18)
- ant (3)
- 基础知识 (12)
- EXT (10)
- My SQL (10)
- java (71)
- spring (37)
- 学习的对象 (2)
- Linux (24)
- 面试 (1)
- HTML/CSS (11)
- tomcat (11)
- 收藏夹 (2)
- Power Designer (2)
- struts.xml配置文件 (1)
- sturts2 (3)
- myeclipse (8)
- eclipse (7)
- Maven (34)
- SVN (3)
- SAP JCO (2)
- JBOSS (11)
- webservice (8)
- word (1)
- 敏捷开发 (1)
- sybase (4)
- Nexus (3)
- EhCache (3)
- log4j (3)
- Cookie (4)
- Session (4)
- CXF (7)
- AXIS (2)
- SSO (1)
- LDAP (1)
- velocity (2)
- Jquery (5)
- redis (2)
- http (4)
- dojo (1)
- Linux资源监控软件mnon的安装与运用 (1)
- notepad++ (1)
- EA (1)
- UML (1)
- JasperReports (1)
- 权限 (0)
- freemarker (4)
- Spring MVC (1)
- JMS (1)
- activeMQ (1)
- hession (3)
- 安全 (1)
- ibatis (2)
- log (1)
- nginx (1)
最新评论
-
winhbb:
我刚好遇到了一个问题(在可以依赖注入的场合有效):有两个模块A ...
解决Maven项目相互依赖/循环依赖/双向依赖的问题 -
nanjiwubing123:
long3ok 写道你好 XmlOutputFormatter ...
用XStream转换复杂XML -
zhoujianboy:
另外一个方法实现eclipse tomcat 热部署:http ...
eclipse下实现maven项目在tomcat容器热部署方法 -
long3ok:
你好 XmlOutputFormatter 请问这个类是在什么 ...
用XStream转换复杂XML -
ganbo:
总结的好,文章给力。
解决Maven项目相互依赖/循环依赖/双向依赖的问题
JSP/SERVLET上载的难点 1、支持任意格式、任意数量的文件上载;2、上载控制的实现;3、表单信息的取得;4、“即插即用”的应用方法;我个人认为,制约通用 上载组件的实现主要是这四个难点。 JSP/SERVLET上传的原理 JSP/SERVLET文件 上载是通过ServletInputStream类来实现的,ServletInputStream类是java.io.InputStream的一个扩 展抽象类,实质上也是一个输入流,通过ReadLine方法从Request端一行一行读取,可见,JSP/SERVLET上载根本上是用流来实现的,理 解了这个就不难理解整个 上载的原理。ServletInputStream实现文件 上载必须采用HTTP POST或者HTTP PUT协议,HTTP GET协议只能传递很少的 数据,是不能实现文件上载的。 下面我们来看一下上传的数据流的结构,首先要在BROWSER端给出一个请求,我们的请求如下(文件名为test1.jsp): <%@ page contentType="text/html; charset=GBK" %> <html> <head> <title>文件上载</title> </head> <body> <form action="test2.jsp" enctype="MULTIPART/FORM-DATA" method=post> 说明一: <input type="text" name="explain1" /> <br /> 说明二: <input type="text" name="explain2" /> <br /> 请选择上载文件1 <input type="file" name="file1" /> <br /> 请选择上载文件2 <input type="file" name="file2" /> <br /> 说明三: <input type="text" name="explain3" /> <br /> <input type="submit" value=" 上 载 " /> </form> </body> </html> 显示如下: 说明一: 说明二: 请选择上载文件一: 请选择上载文件二: 说明三: 在上载请求页中混杂了表单的三个输入框,及两个上载文件,当然输入框可以更多、更杂,可以有选择框、单选及多选按钮,待上传的文件也可以有三个、四个或所需要的更多。 action="test2.jsp"表示表单将提交到"test2.jsp",另外注意表单属性中必须要有这 句:enctype="MULTIPART/FORM-DATA",enctype指定 Form 输入资料的编码方式,“method”属性必须为“post”,这样表单才能提交大量数据,也表示本表单的数据传递将用流操作,“method=get” 表示数据将通过地址栏进行传递,虽然方便快捷,但只适合很少的数据量。 响应端“test2.jsp”页面如下: <%@ page contentType="text/html; charset=GBK" %> <html> <head> <title>文件上载</title> </head> <body> <jsp:useBean id="upBean" scope="page" class="com.upload.UpBean"/> <% upBean.doUpload(request); out.println("上载已完成,请查看输出文件"); %> </body> </html> test2.jsp收到请求后,调用一个java bean执行doUpload(request)操作,本操作将完成流(unicode格式)的接收并不做任何处理地将流顺序写入一个文本文件里,读写操 作中用了一个缓冲区byte[] readByte,用了一个ServletInputStream 的一个方法readLine(byte[] b, int off,int len)方法读取流,请大家注意,ServletInputStream 流的read Line方法是一次读入指定大小的行,java bean (UpBean.java)代码如下:package com.upload; import java.io.*; import javax.servlet.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.ServletInputStream; public class UpBean { public void doUpload(HttpServletRequest req) throws ServletException, IOExcept ion{ //首先定义一个文本文件 File file = new File("out.txt"); //readCount 记录从输入流中实际读取的字符数 int readCount; //输入流缓冲区 byte[] readByte = new byte[1024]; //初始化输入流 ServletInputStream servletInputStream = req.getInputStream(); //初始化一个输出流(到文件) FileOutputStream fileOutputStream = new FileOutputStream(file); //循环从读取输入流中读取字节 readCount = servletInputStream.readLine(readByte, 0,readByte.length); while(readCount != -1){ fileOutputStream.write(readByte,0,readCount); readCount = servletInputStream.readLine(readByte, 0, 1024); } //关闭文件流 fileOutputStream.flush(); } }
为了便于我们阅读流,上载的两个文件为两个简单的文本文件(有格式的文件,不便于直接分析):one.txt及two.txt,文件内容如下,实验时请建立对应文本文件,内容请直接copy以下所示:
one.txt:
one
one one
one one one
two.txt
two
two two
two two two
都准备好以后,我们就可以运行了,运行时请注意,文本部分及文件部分最好不要出现汉字,或其他双字符集字符,尽量采用英文,因为接收是采用的Unicode字符集,我们未对输入做任何处理。 我们在三个输入框输入的字符为,说明一:explain1;说明二:explain2;说明三:explain3,out.txt接收到如下字符:
-----------------------------7d2623a3e0286
Content-Disposition: form-data; name="explain1"
explain1
-----------------------------7d2623a3e0286
Content-Disposition: form-data; name="explain2"
explain2
-----------------------------7d2623a3e0286
Content-Disposition: form-data; name="file1"; filename="C:/test/one.txt"
Content-Type: text/plain
one
one one
one one one
-----------------------------7d2623a3e0286
Content-Disposition: form-data; name="file2"; filename="C:/test/two.txt"
Content-Type: text/plain
two
two two
two two two
-----------------------------7d2623a3e0286
Content-Disposition: form-data; name="explain3"
explain3
-----------------------------7d2623a3e0286--
可以很明显的看到,out.txt被“-----------------------------7d2623a3e0286”分成了五 节,即表单的每个输入部分都对应一节,结尾部分是“-----------------------------7d2623a3e0286--”,刚好 比开始的一段字符在最后多出两个“-”, 每节的第一行是输入内容的说明“Content-Disposition: form-data”,“name="explain1"”表示 上载请求项的name,文本输入部分仅这两个说明,如果输入的是文件还用两项说明:“filename="C:/test/one.txt"”,表示输入 源,基于ms-windows的ie上载带有完整的路径,netscape及其他浏览器可能只有一个文件名;还有一项是关于输入格式的“Content- Type:text/plain”;表示输入格式是文本类型,如果我们上载的是bmp文件则为“Content-Type: image/bmp”,word文件为“application/msword”...,说明的下面紧接着是一个空行,然后下面才是我们所需的内容。
仔细分析未加修改的输入流格式,有助于我们实现文件与输入文本的准确分离。
通过以上的分析可以看出,准确分离上载的文件及文本信息需要以下要素:1、数据段分割符、结束符(比分割符多出两个“-”);2、输入文本及上载的文件 区分标志(文本为“name=”,文件为“filename=”);3、编码格式,可以通过HttpServletRequest 类getCharacterEncoding() 方法取得。4、表单文本部分名称及内容,名称为“name=”后面的字符,内容为该段第三行及以后的内容;5、文件名称及内容,名称为 “filename=”后面的字符,内容为该段第三行及以后的内容。
下面我们将讨论输入流的分离。
程序实现分析
我们首先画出程序实现的主体结构图,请注意判断文件标志(indexOf("filename=")>0),与判断文本标志 (indexOf("name=")>0)的顺序,当(indexOf("filename=")>0)成立时, (indexOf("name=")>0)一定也是成立的,所以判断文件要在判断文本前。
分离文件及输入文本,为完整
保存上 载的文件信息及输入的文本信息,本程序建立了两个类:public class FileInfo 、public class InputField,及两个线性表private ArrayList upFilesList、private ArrayList inputFieldList,用于动态增加文件信息及文本信息,定义如下:
FileInfo.java(记录上载文件信息)
package com.upload;
public class FileInfo {
private String fileName;
private boolean validFlag;
private String filePath;
private long fileSize;
//设置文件信息
//上载文件是否有效标志
public void setValidFlag(boolean validFlag){
this.validFlag = validFlag;
}
//文件名
public void setFileName(String filename){
this.fileName = filename;
}
//存贮路
【转载地址】http://blog.csdn.net/collin1211/article/details/3074468
参照学习文章:http://robert-liu.iteye.com/blog/713568
发表评论
-
不同版本(2.3,2.4,2.5)的Servlet web.xml 头信息
2014-01-21 17:17 843Servlet 2.3 <?xml version=&q ... -
Tomcat j_security_check安全策略
2013-08-22 15:06 15001. 内存域:类名,MemoryRealm;在初始化阶段,从X ... -
jsp freemarker velocity 比较
2013-08-01 11:13 997在java领域,表现层技术主要有三种:jsp、freemark ... -
jsp el 和xss
2013-04-16 14:44 3311jsp 2.0中的 ${todo.description}是不 ... -
jsp framework
2013-04-04 11:40 1008freemarker 优点: 1、不能编写java代码,可 ... -
response.isCommitted()
2012-12-24 15:37 10231HelloServlet类的service()方法最后调用Pr ... -
jsessionid的困扰
2012-11-24 20:44 1717[size=x-large]问题:向某银行发送支付请求时,如果 ... -
Tomcat的Session设置
2012-11-24 00:37 11741、为单个WEB设置SESSION 在WEB.XML中添加 ... -
从form的enctype属性到Content-Type再到request.getInputStream
2012-09-03 16:42 1210还是一个异常引发的故事: 需要实现一个手机客户端行为分析的需 ... -
servlet多线程
2012-07-17 15:49 907一,servlet容器如何同时处理多个请求。 Servlet采 ... -
注解@PostConstruct与@PreDestroy
2012-07-11 18:13 0从Java EE 5规范开始,Servlet中增加了两个影响S ... -
使用javarebel 实现tomcat 动态加载类---热部署 [转载]
2011-10-10 18:26 1242在项目中开发都是使用tomcat,当类修改之后,新加field ... -
设置WebLogic启动内存
2011-03-23 15:24 1682我们经常在使用WebLoigc部署应用程序后,发现程序运 ... -
EL 表达式 访问集合和String的 的内置方法(比如:size ,contains, indexOf ,endWith...)
2011-03-07 19:14 1501称呼 Functions 标签库为标签库,倒不如称呼其为函数库 ... -
EL表达式
2011-03-07 19:13 1020the JavaServer Pages Standard T ... -
判断点是否在任意多边形内(java)
2011-03-05 22:34 5936import java.util.ArrayList; ... -
Unknown constant tag 115 in class file jsp_servlet/_finance/__caiwuzhuangkuangou
2010-12-08 12:09 1560Error 500--Internal Server Erro ... -
jsp
2010-11-19 16:33 1490index.jsp:13:22: "E:\BEA\u ...
相关推荐
本文将深入探讨如何使用C#进行HTTP POST方式的文件上传,并关注一些关键点,如文件大小不受限制、上传进度显示以及确保文件的稳定传输。 首先,我们要理解HTTP POST请求的工作原理。POST请求是HTTP协议中的一个方法...
本主题聚焦于使用C语言实现HTTP POST方法上传文件和发送JSON数据,这对于开发嵌入式系统、移动应用后端或者任何需要轻量级网络交互的项目来说尤其有用。 HTTP POST方法通常用于向服务器发送数据,比如用户填写的...
http post 上传文件到服务器及hfs 服务器接收文件。 #ifndef __HTTP_POST__ #define __HTTP_POST__ #define SERVER_ADDR "123.207.48.25" #define SERVER_PORT 10001 #define SERVER_URL "123.207.48.25" #define ...
在IT行业中,C语言是一种基础且强大的编程语言,尽管它不如高级语言那样具有内置的网络功能,但通过一些库和工具,我们仍然可以利用C语言进行HTTP请求,包括文件的上传和下载,以及处理JSON数据。本文将详细介绍如何...
标题"POST提交文件也接收文件"指的是通过HTTP POST请求来上传文件,并同时处理接收到的文件。这个过程涉及到客户端(如浏览器)与服务器之间的交互,以及C#后端代码的实现。 首先,我们需要了解HTTP POST请求。POST...
发送POST:var hp = new HttpHelper("http://www.cnblogs.com/upload",HttpMethod.POST); hp.AddPostData("uid", "123123"); hp.Send(); 表单上传文件:var http = new PostFileHelper(...
HTTP 实现文件上传 HTTP 实现文件上传 HTTP 实现文件上传 HTTP 实现文件上传 HTTP 实现文件上传 HTTP 实现文件上传 HTTP 实现文件上传HTTP 实现文件上传
HTTP POST 是一种在Web开发中广泛使用的HTTP方法,用于向服务器发送数据,特别是当需要上传文件或提交表单数据时。在这个"HTTP POST 发送文件示例程序"中,我们将探讨如何利用编程语言来实现这一功能,以上传文件到...
POST是HTTP请求的一种类型,用于向服务器发送数据,通常用于提交表单或上传文件。与GET请求不同,POST请求的数据不会显示在URL中,而是包含在请求正文中。 在Qt中,我们可以使用QNetworkAccessManager类来处理HTTP...
本文将深入探讨如何在C++中实现一个HTTP服务端,尤其是处理HTTP POST请求,特别是接收form_data类型的文件,如图片。这在现代Web开发中是非常常见的场景,例如用户上传头像或者分享照片。 首先,理解HTTP协议的基础...
3. 保存文件:服务器将临时存储的文件移动到指定位置(在这个例子中是'uploads/'目录),并可能进行一些验证,如检查文件类型、大小等。 4. 返回响应:最后,服务器返回一个响应告知客户端文件是否成功上传。 在...
在IT行业中,网络请求是应用程序与服务器交互的重要方式,而POST...通过分析这个示例,你可以深入理解POST文件上传的实现细节,并在实际项目中灵活运用。如果有任何疑问,记得按照描述中的提示向作者咨询或查看评论。
本主题聚焦于使用VC(Visual C++)客户端通过HTTP的POST方法将文件上传至PHP服务器的实践过程,这在Web开发中具有重要的应用价值。 首先,我们要理解HTTP的POST方法。POST请求常用于向服务器发送数据,如表单提交或...
HttpClient Post提交多文件及多个普通参数,已经封装成工具类。 需传入 要请求的url 普通参数map 例 map.put("param1","张三"); 需要传入的文件流map 其中key为文件名 服务端接收无乱码。
当我们谈论"C# .NET后台post上传文件"时,我们通常是指在Web应用中通过HTTP POST请求将文件从客户端(如浏览器)上传到服务器的过程。在这个场景中,特别是涉及到图片上传,可能的应用场景包括用户头像上传、产品...
使用httpPost java实现文件上传转发。 使用MultipartFile[] files,@RequestParam Map,Object> map 接收
在本例中,你可以使用HttpWatch来观察成功的文件上传请求的细节,比如HTTP头、请求体的格式,然后在代码中模仿这些设置。 7. **VC6.0编译**: 虽然VC6.0是一个较旧的IDE,但依然可以编译和运行现代的C++代码。确保...
根据提供的文件信息,...以上就是从给定文件的标题、描述、标签以及部分内容中总结出来的知识点,涵盖了Java POST请求发送与接收文件流的基础操作以及Spring MVC中处理文件上传的相关内容。希望这些信息对你有所帮助。
实现从C#后台HTTP Post文件到JAVA后台 JAVA后台接收代码与普能表单上传接收代码一样,这里没有提供。
Public c_strBoundary ' 文件上传Post数据包中的分隔符 Public c_strContentType ' text/plain or image/pjpeg and so on "application/upload" Public c_strResponseText ' 文件上传后,服务器返回的信息 ...