- 浏览: 374490 次
- 性别:
- 来自: 武汉
文章分类
最新评论
-
angryid:
dsafddsfssssssssddsdsasssssssss ...
freemarker学习笔记---assign标签 -
lylovejava0:
数据库里字段不能转换。。这样会慢死。。在说如果表里有分区等设置 ...
Oracle 时间段查询 -
greatjone:
必须得评论下,这篇博文相当实用,在csdn上找个东西老还要积分 ...
MyEclipse下安装jad插件 -
mytream:
...
模拟tomcat工作原理 -
liujianche11:
小心点 createdate<=to_date('20 ...
Oracle 时间段查询
现在有很多 Web程序都有上传功能,实现上传功能的组件或框架也很多,如基于 java的 Commons FileUpload 、还有 Struts1.x和 Struts2中带的上传文件功能(实际上, Struts2在底层也使用了 Commons FileUpload)。在 asp.net中也有相应的上传文件的控件。
虽然现在有很多上传组件可以利用,但是了解 Web上传文件的原理,对于处理突然出现的问题会有很大的帮助,下面就来讲一下通过浏览器上传文件的基本原理。在了解了原理之后,就可以非常容易地自制满足自身需要的上传组件了。
众所周知,在客户端代码中需要使用
<input type='file' name='file' />
来选择要上传的文件,并上传,代码如上:
< head >
< title > upload </ title >
< meta http-equiv ="description" content ="this is my page" >
< meta http-equiv ="content-type" content ="text/html; charset=GB18030" >
</ head >
< body >
< form action ="servlet/UploadFile" method ="post"
enctype ="multipart/form-data" >
< input type ="file" name ="file1" id ="file1" />
< input type ="file" name ="file2" id ="file2" />
< input type ="submit" value ="上传" />
</ form >
</ body >
</ html >
从上面的代码可以看出,有两个文件选择框( file1和 file2),在上传文件时, <form>标签必须加上 enctype="multipart/form-data",否则浏览器无法将文件内容上传到服务端。下面我们来做个实验。在 Servlet的 doPost方法中编写如下的代码,如果想使用 asp.net或其他的语言或技术,也可以很容易实现相应的功能。
throws ServletException, IOException
{
java.io.InputStream is = request.getInputStream();
java.io.FileOutputStream fos = new java.io.FileOutputStream( " d:\\out.txt " );
byte [] buffer = new byte [ 8192 ];
int count = 0 ;
while ((count = is.read(buffer)) > 0 )
{
fos.write(buffer, 0 , count);
}
fos.close();
}
上面的功能非常简单,只是通过
request
获得一个
InputStream
对象,并通过这个对象从客户端获得发送过来的字节流(注意,一定要用字节流,因为,上传的文件可能是二进制文件,如图象文件,因此,使用字节流会更通用)。并将这些字节流保存在
D
盘的
out.txt
文件中。然后我们打开
out.txt
,文件的内容如图
1
所示:
图1
由于
out.txt是使用文本形式打开的,并且
file1上传的是
a.jpg(一个图象文件
),因此,显示的是一些乱码。我们可以不用管它们。只需要看看这些内容的头部。我们很快就可以找到规律。每一个文件内容的头部都由“
-----------------------------30514443229777”分隔,然后是这个文件的属性,如下:
Content-Disposition: form-data; name="file1"; filename="a.jpg"
Content-Type: image/jpeg
其中包含了文件选择框的 name属性,还有上传的文件名( filename字段),要注意的, firefox在上传时,这个 filename属性值只是文件名,如果使用 IE,就是带路径的文件名,如 D:"a.jpg。
接下来的规则就和 HTTP的头一样了,以一个空行( "r"n)分隔。后面就是文件的具体内容。现在最关键的文件的结尾,从图 1可以看出,文件的结尾也是“ -----------------------------30514443229777”,因此,可以断定,第一个上传的文件(包括文件头)是夹在两个“ -----------------------------30514443229777”之间的。而“ -----------------------------30514443229777”就是 multipart/form-data协议的分隔符。但这里还有一个最关键的问题。这个分隔符每次上传都不一样,服务端是如何知道每次上传的这个分隔符的呢?
实际上,这个分隔符是通过
HTTP请求头的
Content-Type字段获得,可通过下面的代码输出这个字段值:
System.out.println(request.getHeader("Content-type"));
输出的内容如下:
multipart/form-data; boundary=---------------------------106712230227687
只要在服务端获得 boundary后面的值即可。经过测试, Content-Type中的分隔符号中的“ -”比实际上传的“ -”少两个,不知是怎么回事。不过这没关系,我们可以认为每一个文件块是以 ""r"n—“结尾的,或是直接将从 boundary获得的分隔符加两个“ —”。而最后结尾的分隔符是“ ---------------------------106712230227687—”,后面多了两个“ —”。
综合上述,也就是说,一个文件块是以“ ---------------------------106712230227687”开头,以“ —”结尾,从图 2可以看出这一切。
图
2
至于剩下的工作,就是按着上面的规则来分析这些字符流了。分析的方法很多。在这里就不详述了。
发表评论
-
Java内存分析工具
2012-01-17 10:45 1561Java运行时数据区包含 ... -
中文乱码问题案例分析
2011-10-14 12:50 1853案例: 1、 环境介绍: 项目 ... -
button在Firefox下点击提交表单(form)的问题
2011-09-21 10:33 1148【关键词】Button Form FireFox ... -
模拟tomcat工作原理
2011-07-28 13:10 1078httpserver原理:服务器端 打开一个socket,一直 ... -
EL表达式中empty的用法
2011-07-07 17:07 2443在做jsp系统的时候经常会使用el标签,而empty ... -
解决TOMCAT控制台输出 “Parameters: Invalid chunk ignored.”
2011-07-05 13:27 1201用过tomcat的都知道,request参数中如果有程 ... -
if 和 else if
2011-06-20 11:23 776最近做项目碰到服务器端验证用到了大量的if语句,首先不 ... -
java枚举类详解
2011-06-16 13:05 1471JDK1.6增添了一些新的特性,其中枚举就是其中比较重要 ... -
Java正则表达式的使用
2011-05-20 10:01 657import java.util.regex.Matcher; ... -
Cookie的MaxAge属性及其使用
2011-05-07 01:14 5822首先,看看API文档中对M ... -
根据不同情况提交表单
2011-05-05 10:29 1103在项目开发的过程中经常涉及到表单提交的问题,为了使得 ... -
Jsp传递中文参数详解
2011-05-01 17:39 922目前在jsp页面中传递中文参数,主要有两种方式: ... -
java.math.BigDecimal的用法
2011-04-18 15:34 1214Java中的简单浮点数类型float和double不能够进行 ... -
存储基础知识:数据一致性
2011-04-18 11:00 1593一、概述 数据一致性是指关联数据之间的逻辑关系是否正确和完整 ... -
java 检查 URL 合法性
2011-04-15 10:19 4794/** * URL检查& ... -
关于用SimpleDateFormat进行日期格式化的问题
2011-04-01 13:45 1022做了遮掩一个实验: public static vo ... -
深入Java对象的比较
2011-03-31 18:22 1387深入Java对象的比较 ... -
commons-fileupload上传组件学习记录
2011-03-30 11:18 2185最近在用commons-fileupload做文件 ... -
java保留两位小数
2011-03-29 18:23 1053java保留两位小数问题: 方式一: ... -
RequestDispatcher接口中的include()方法和forward()方法的区别
2011-03-24 23:12 1362请求转发中 RequestDispatcher 接口中的 ...
相关推荐
本文将详细介绍Web文件上传的基本原理及其实现方法,并通过具体的代码示例来帮助读者更好地理解和掌握这一技术。 #### 二、HTTP表单上传规范 文件上传的核心是通过HTTP协议完成数据传输。当用户选择文件并提交表单...
本文将深入探讨如何使用C++实现向Web服务器上传文件,特别是在VS2013环境下,以及与Java Web工程的交互。 首先,我们要了解HTTP协议中的POST方法。在Web应用中,POST请求常用于提交数据到服务器进行处理,例如当...
在IT行业中,C#是一种广泛使用的编程语言,尤其在开发Web应用程序时,如WebAPI。...通过研究这些源码,开发者可以深入理解WebAPI的工作原理,以及如何在实际项目中安全、高效地处理文件上传和下载。
### 通用型Web文件上传JavaBean的实现:深入解析与应用 #### 一、Web文件上传的基本原理 HTTP协议作为互联网通信的基础,定义了一系列的方法,包括GET、HEAD、POST、PUT、DELETE、TRACE和CONNECT,其中GET和POST...
总结一下,本实例展示了如何在ASP.NET(C#) Web API中利用文件流实现文件下载。通过创建HTTP响应,设置正确的响应头,并将文件内容作为流发送,我们可以方便地让客户端接收到文件并保存到本地。这种方法简单、高效,...
下面将详细论述PHP开发环境下文件上传的原理与实现方法,并对上传文件的格式类型及大小进行限制。 一、PHP简介 PHP(Hypertext Preprocessor的缩写)是一种运行于服务器端并完全跨平台的嵌入式脚本编程语言。PHP...
首先,我们要理解Web上传文件的基本原理。传统的HTTP表单提交方式在处理大文件时可能会遇到问题,因为它们通常不支持断点续传,且可能导致浏览器崩溃。为了解决这个问题,我们可以采用HTML5中的File API,它提供了对...
通过以上步骤,你就可以实现一个基本的Web多文件异步上传功能。在实际项目中,你可能还需要考虑错误处理、安全问题(如防止跨站脚本攻击)以及用户体验优化(如使用预览图、上传队列管理等)。记住,良好的前端实践...
本教程将深入讲解如何实现Web文件存储上传。 一、文件上传的基本原理 文件上传是通过HTTP或HTTPS协议实现的,用户选择本地文件后,浏览器会将其封装在表单数据中发送到服务器。在HTML中,可以使用`...
在Web开发中,实现文件上传功能是常见的需求,特别是在构建交互性强、用户参与度高的网站时。本篇文章将深入探讨如何在不同的Web框架下实现这一功能,并提供一个名为"smartUpload"的工具作为示例。 文件上传是允许...
本项目基于Java Web技术,实现了文件从客户端上传到服务器本地的简单流程,这对于初学者理解Web应用程序的工作原理非常有帮助。以下是这个"web文件上传"项目的详细知识点解析: 1. **JSP(JavaServer Pages)**:...
总之,C#编写的Web大文件上传代码通过HttpUploadModule实现了高效、可靠的分块上传功能,适用于VS2008开发环境。这个项目不仅展示了C#处理大文件上传的技术,也体现了在ASP.NET Web应用中如何通过自定义模块扩展IIS...
首先,我们需要理解Web上传的基本原理。在HTTP协议中,文件上传通常通过POST请求进行,其中包含一个multipart/form-data编码的表单数据。这种编码方式允许我们将文件内容作为二进制数据传输,同时还可以传递其他表单...
文件上传是Web应用中常见的功能,用户可以上传图片、文档等各种类型的数据到服务器。这个过程涉及到许多技术细节,包括前端的表单提交、文件API,以及后端的接收处理和存储。下面我们将深入探讨文件上传的原理。 1....
"Web方式通过Flash批量上传文件"是一种解决方法,它利用了Adobe Flash技术来实现多文件同时上传的功能。本文将深入探讨这个主题,包括其原理、优势以及实现步骤。 Flash技术在过去的网页交互中扮演了重要角色,它...
本篇将详细解析Web应用安全漏洞的原理及测试方法,主要涉及SQL注入、任意文件上传、任意文件下载、文件包含、跨站脚本(XSS)攻击、跨站请求伪造(CSRF)以及逻辑漏洞。 首先,SQL注入漏洞是Web应用中最常见也是...
标题“Delphi写ASP组件实现快速多文件WEB上传”揭示了一个使用Delphi编程语言创建的ASP(Active Server Pages)组件,该组件旨在提高在Web环境中上传多个文件的效率。这个技术通常用于构建交互性强、用户友好的网站...
【文件上传漏洞】是Web应用安全领域中的一个重要概念,它主要出现在允许用户上传文件到服务器的应用程序中。当系统没有正确地验证或过滤上传的文件类型时,攻击者可以利用这个漏洞上传恶意代码,例如病毒、木马或者...
Struts2.0文件上传原理主要涉及Web应用中处理用户上传文件的功能,这一过程涉及到多个步骤和技术,包括HTTP协议、Multipart/form-data编码、临时文件存储以及后台处理。以下是对Struts2.0文件上传原理的详细解释: ...