`
Mojarra
  • 浏览: 130040 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

文件上传的秘密(四)大小限制与进度

阅读更多
RFC1867规范中,对表单上传文件的大小和进度都没有作出规定,W3C的HTML规范的FileUpload对象(<input type="file"> 标签每出现一次,一个 FileUpload 对象就会被创建)也没有对表单中的文件大小作出限制,因此,这个问题还是留给了WEB应用服务器端开发人员。
HTTP请求提交到服务器端后,在未解析各boundary中的文件内容之前,是可以知道这次HTTP请求的总长度的,但是考虑到一个表单内可以容纳多个FileUpload对象,所以,只要发现解析的两个boundary内的字节数超过指定的数量,立即抛出一个运行期异常ThresholdException。重构后的的MultiPartFile类,增加了bytes和threshold成员变量,append方法中新增加3行代码,并且,其子类要显式调用super.append(…);


public void append(byte[] buff, int off, int len) throws IOException {
		bytes += len;
		if (threshold > 0 && bytes > threshold)
			throw new ThresholdException();
}


在开发中,如果程序代码未捕获这个运行期异常,上传文件的过程终止,如果捕获了此异常,并且未让程序终止,上传文件的过程继续,也就是虽然超出了大小限制,但仍然完成了文件上传的过程,文件会被保存到磁盘或者内存中。

对于文件上传的进度,RFC 1867也没有做相应的描述,从文件被编码到发送请求到服务器端,直至文件被解析出来并保存,是一个复杂的过程,RFC未对此做详细描述。浏览器对此功能有一些自主的空间,是先读取所有的文件再编码,还是逐个文件读取逐个编码,还是对文件进行局部编码局部发送,这些方式可以采用同步发送也可以采用异步。
这些复杂未描述的方式,对开发者来说,到底是什么相对于什么的进度,是非常迷惑的。在RFC 1867中,根本就是一个不予以考虑的问题,所以,文件上传的进度,是属于一个很含糊的需求。HTTP是无状态的协议,又缺少了客户端的支持,这个实现这个功能本身,需要不小的资源开销。用一个词来概括这个功能——鸡肋。
尽管如此,未了满足一些对网页特效的要求,FastUpload这个开源组件还是提供了进度的功能,但是,非常有限。只有在表单内仅有一个文件输入组件时才能生效,而且,这个进度受上传请求编码方式的影响,并不精确。

public class ProgressListener {
	
	private FileUploadParser fileUploadParser;
	
	public ProgressListener(FileUploadParser fileUploadParser) {
		super();
		this.fileUploadParser = fileUploadParser;
	}

	public double progress() {
		return fileUploadParser.getReadBytes()*1.0 / fileUploadParser.getContentLength();
	}

}


开发人员在需要了解文件上传进度的时候,才调用progress()函数。

<原创内容,版权所有,如若转载,请注明出处,不胜感谢!仪山湖>
分享到:
评论
2 楼 Mojarra 2012-07-22  
王雷震 写道
这个东西没有操作手册吗?

开发手册会在下一个版本中一起发行
1 楼 王雷震 2012-07-20  
这个东西没有操作手册吗?

相关推荐

    java 上传文件,实时获取上传进度.

    - 文件大小限制:为了避免过大文件导致服务器资源耗尽,应设置上传文件大小的最大限制。 - 文件类型检查:确保上传的文件类型符合预期,防止恶意文件上传。 - 文件重命名:上传后的文件应进行重命名,防止路径...

    php + flash 大文件 上传显示进度

    在大文件上传时,由于文件大小可能超过浏览器或服务器的限制,传统的HTTP POST方法可能无法胜任。因此,我们需要一种分块上传或断点续传的方法。PHP的`Chunked upload`技术可以解决这个问题,它将大文件分割成多个...

    Nginx文件上传进度显示

    ### Nginx文件上传进度显示知识点详解 #### 一、Nginx Upload Progress 模块简介 Nginx 是一款广泛使用的高性能 HTTP 和反向代理 Web 服务器,它以其稳定性、丰富的功能集、示例配置文件和低资源消耗而著称。在文件...

    C# 文件上传、带进度(FTP类)

    功能描述: 建立FTP链接 支持代理 多种重载的同步上传文件 多种重载的异步上传文件 多种重载的同步下载文件 多种重载的异步下载文件 上传文件的进度百分比 下载文件的进度白分比 有区分...

    上传文件(图片缩略图上传带进度显示)

    在JavaScript中,XMLHttpRequest或者Fetch API提供了监听上传进度的事件,如`progress`事件,可以根据已上传的字节数与总字节数计算出当前的上传进度,并更新UI上的进度条。 再者,图片缩略图的生成通常在客户端...

    大文件上传类,使用简单,显示上传进度条,图片生成缩略图,断线续传,文件类型限制,文件大小限制,上传文件个数限制

    这个特定的压缩包文件包含了一系列与大文件上传相关的功能,包括但不限于:使用简便的API,显示上传进度条,图片预览(通过生成缩略图),支持断线续传,以及对文件类型、大小和上传数量的控制。以下将详细阐述这些...

    多文件上传,并显示每一个的进度

    每个`MultipartFile`对象代表一个上传的文件,可以获取文件名、类型、大小等信息,并将其保存到服务器上。 2. **Atlassian Struts和Servlet**:如果你的项目使用的是Struts或Servlet,也可以实现类似的功能。Struts...

    C#在WinForm下使用HttpWebRequest上传文件并显示进度

    博客文章可能还会介绍如何在WinForm界面中创建一个进度条控件(ProgressBar),并将上传进度与控件关联。这通常涉及到后台线程或异步操作,以避免阻塞UI。使用`BackgroundWorker`组件或`.NET 4.5`以上的`async/await...

    服务器上传文件大小扩大

    大多数服务器操作系统(如Linux或Windows Server)都有对单个文件上传大小的默认限制。例如,在Apache或Nginx等Web服务器中,`client_max_body_size`参数控制了上传文件的最大尺寸。在Linux系统中,`ulimit`命令可以...

    html5带进度多文件大文件上传插件

    因此,应限制单个文件大小,设置上传时间限制,并对上传文件进行安全检查,如检查文件类型和内容。 9. 错误处理与用户体验:提供友好的错误提示,如文件类型不支持、文件过大、网络中断等,以提高用户体验。 通过...

    FTPUpload上传文件 进度条显示进度

    7. **关闭连接**:文件上传完成后,记得断开与FTP服务器的连接,使用`disconnect()`方法。 以下是一个简化的代码示例: ```java FTPClient ftp = new FTPClient(); ftp.connect("ftp.server.com"); ftp.login(...

    HTML中文件上传与上传进度跟踪的原理分析.pdf

    前端则通过监听HTTP请求的progress事件,根据接收到的已上传字节数与文件总大小计算出当前进度,实时更新UI。有些浏览器还支持FileReader API,允许前端先读取文件的部分内容,预估文件大小,从而更准确地显示进度。...

    php上传一个大的文件,文件的大小有没有限制.zip

    - `memory_limit`:虽然不直接与文件上传有关,但大文件上传可能消耗大量内存,所以确保内存限制足够大也很重要。 要更改这些配置,可以在php.ini文件中直接编辑,或者在PHP脚本中使用`ini_set()`函数临时修改。...

    原生JS上传文件,获取文件二进制数据及文件大小和文件名称

    实际应用中,你可能还需要处理多文件上传、进度显示、错误处理、跨域上传等问题。例如,你可以使用`FormData`对象来收集多个文件和其他表单数据,然后通过`fetch`或`XMLHttpRequest`发送到服务器。如果需要在上传前...

    flex+php上传文件可自定义上传格式,上传文件限制大小

    “上传文件限制大小”则是指在`PHP`后端设定文件上传的最大限制。在`PHP`配置文件`php.ini`中,有两个关键参数可以控制上传大小:`upload_max_filesize`定义了单个文件的最大大小,而`post_max_size`则限制了整个...

    AJAX+JSP实现基于WEB的文件上传的进度控制

    1. 文件大小限制:为了防止大文件导致服务器资源耗尽,可以在客户端和服务端都设置文件大小的限制。 2. 文件类型检查:验证用户上传的文件类型,避免上传恶意文件。 3. 多线程上传:对于大文件,可以采用分块上传的...

    用JavaScript限制上传文件的大小

    ### 使用JavaScript限制上传文件的大小 在Web开发中,经常需要处理用户上传文件的情况。为了优化用户体验并确保服务器资源的有效利用,通常会设置文件大小的限制。本文将详细介绍如何使用JavaScript来实现对上传...

    上传文件jsweb前端(包含文件格式限制)

    "上传文件jsweb前端(包含文件格式限制)"这个项目旨在提供一个完整的前端文件上传解决方案,它不仅支持基本的文件上传操作,还包含了对文件格式和大小的严格限制,以确保用户上传的数据符合预设的标准,类似于163...

    通过AJAX监控文件上传进度

    ### 通过 AJAX 监控文件上传进度 在 Web 开发中,文件上传是常见的功能之一。传统的文件上传机制是基于 HTTP 协议的表单提交,即用户通过 `&lt;input type="file"&gt;` 选择文件后,整个表单或文件被一次性发送到服务器。...

    ssm实现多文件上传实时更新进度信息

    AJAX(Asynchronous JavaScript and XML)允许我们在不刷新整个页面的情况下与服务器进行异步通信,非常适合用来传递文件上传进度。 在前端,我们可以创建一个表单,使用HTML5的`&lt;input type="file" multiple&gt;`来...

Global site tag (gtag.js) - Google Analytics