尝试使用blueimp
JQuery
文件上传插件用于上传大文件(大于 1 GB)。发现使用maxChunkSize
配置允许从客户端分块上传文件。我们可以使用服务器获取块大小和文件名Content-Range
& Content-Disposition
标头。
我的服务器是Weblogic
并在 a 中编写服务器端代码Servlet
.
这是我的问题:
- 服务器端:如何知道请求是否是最后一个块?
- 服务器端如何将所有接收到的块数据写入单个文件?
- 由于每个块将作为单独的请求发送,因此如何识别与同一文件相关的分块请求?
检查 github 上插件的 wiki - 它有一个关于分块文件上传的部分。
来自wiki https://github.com/blueimp/jQuery-File-Upload/wiki/Chunked-file-uploads:
这个例子PHP 上传处理程序 https://github.com/blueimp/jQuery-File-Upload/blob/master/server/php/UploadHandler.php支持分块上传
盒子。
为了支持分块上传,上传处理程序使用内容范围标头 http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.16,由插件为每个传输
块。
检查上面链接的示例 PHP 代码。
服务器端:如何知道请求是否是最后一个块?
Each Content-Range
请求标头将包含该请求中包含的文件的字节范围以及文件的总字节数。因此,您可以根据字节总数检查范围的结束值,以确定请求是否包含最后一个块。
检查中给出的示例this http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.16W3C 网站上的部分。
服务器端如何将所有接收到的块数据写入单个文件?
您可以将内存中的所有块收集到一个数组中,然后将它们一次性写入文件 - 但这对于较大的文件来说可能效率低下。 Java 的 IO API 提供了通过提供初始偏移量写入文件部分的方法。查看this https://stackoverflow.com/questions/181408/问题。
由于每个块将作为单独的请求发送,因此如何识别与同一文件相关的分块请求?
检查是否有Content-Range
每个请求中的标头 - 如果请求具有该标头,那么它是许多块上传请求之一。使用标头的值,您可以确定该请求中包含文件的哪个部分/部分。
另外,Content-Disposition
请求中的标头将包含文件名,您可以使用该文件名链接同一文件的各个请求。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)