首页 > 其他分享 >用jsp 实现断点续传 (HTTP)

用jsp 实现断点续传 (HTTP)

时间:2022-11-14 13:33:44浏览次数:74  
标签:断点续传 HTTP form MIME Content jsp 浏览器 enctype

1、介绍enctype

enctype 属性规定发送到服务器之前应该如何对表单数据进行编码。

enctype作用是告知服务器请求正文的MIME类型(请求消息头content-type的作用一样)

1、1 enctype的取值有三种

描述

application/x-www-form-urlencoded

在发送前编码所有字符(默认)

multipart/form-data

不对字符编码。每一个表单项分割为一个部件

text/plain

空格转换为 “+” 加号,但不对特殊字符编码。

1. 当enctype=’application/x-www-form-urlencoded’

编辑

2.当enctype=’multipart/form-data’

编辑

 

通过观察发现这个的请求体就发生了变化。这种请求体被称之为多部件请求体。

什么是多部件请求体:就是把每一个表单项分割为一个部件。

以请求头的content-type的boundary后面的一串随机字符串作为分割标识

普通表单项:

//name的意思是文本框里面name的属性值,而admin是我们输入的文本值

Content-Disposition: form-data; name="username"

admin

文件表单项

//filename的意思是:我们上传的文件名称,content-Type的意思是:MIME类型,asdasdas的意思是:文件里面的内容

Content-Disposition: form-data; name="upload"; filename="a.txt"

Content-Type: text/plain

asdasdas

3. 当enctype=’text/plain’

编辑

w3c称:空格会变成”+”加号,但是我这里没有发现,只有当get请求的时候,空格会变成”+”号

编辑

进入正题

完成上传需要满足3个必要的条件

提供form表单,method必须是post,因为get请求的传输数据一般为2kb,不同浏览器不一样。

form表单属性enctype的必须是multipart/form-data

提供input type=”file”类的上传输入域

大致实现原理:当enctype的值是multipart/form-data时,浏览器会把每个表单项进行分割,分割成不同的部件,以boundary的值为分割标识,这个标识的字符串是随机生成的,最后一个表单项的分割标识字符串末尾会多两个”- -“,代表结束。服务端用request.getHeader(“content-type”)获取分割字符串,然后进行解析。

编辑

 

代码实现

一、开发环境搭建

准备两个第三方jar包

commons-io包

commons-upload包

所有依赖包

编辑

代码实现

编辑

下载的必须条件

两个头一个流

content-type

Content-Type是返回消息中非常重要的内容,表示文档内容属于什么MIME类型。

浏览器会根据Content-Type来决定如何显示返回的消息体内容。

默认值是text/html

可以使用request.getServletContext().getMimeType(“文件名”)获取MIME类型。

Content-Disposition

Content-disposition 是 MIME 协议的扩展,MIME 协议指示 MIME 用户代理如何显示附加的文件。

默认值是inline,表示在浏览器窗口中打开。

服务端向客户端游览器发送文件时,如果是浏览器支持的文件类型,一般会默认使用浏览器打开,比如txt、jpg等,会直接在浏览器 中显示。

如果需要提示用户保存,利用Content-Disposition进行一下处理,关键在于一定要加上attachment。

例如:Content-Disposition:attachment;filename=xxx,浏览器就会激活下载框对话框, attachment 表示附件, filname 后面跟随的是显示在下载框中的文件名称。

下载就是向客户端响应字节数据! 将一个文件变成字节数组, 使用 response.getOutputStream()

来响应给浏览器。

代码如下,此代码已经实现了断点续传功能,用户在下载过程可以暂停,和继续下载,对服务器造成的压力也比较小。

编辑

 

加载文件列表,在下载列表中显示出来

编辑

后端代码逻辑大部分是相同的,目前能够支持MySQL,Oracle,SQL。在使用前需要配置一下数据库,示例下载地址:

 jsp-eclipse:https://gitee.com/xproer/jsp-eclipse/tree/6.5.38/

 jsp-myeclipse:https://gitee.com/xproer/jsp-myeclipse/tree/6.5.38/

 jsp-springboot:https://gitee.com/xproer/jsp-springboot/tree/6.5.38/

详细配置信息及思路

欢迎入群一起讨论“374992201”

标签:断点续传,HTTP,form,MIME,Content,jsp,浏览器,enctype
From: https://www.cnblogs.com/zyzzz/p/16888761.html

相关文章

  • JMeter自定义HTTP组件
    JMeter是一个优秀的开源项目,我们可以在jmeter的官网了解到如何使用和如何二次开发:https://jmeter.apache.org/因工作需要,最近做了一个JMeter自定义的http组件(其实就是在ht......
  • 响应的HTTP协议
    1.响应行  (1)响应的协议和版本号  (2)响应状态码  (3)响应状态述符2.响应头   key:value 不同的响应头有不同的含义 空行3.响应体  回传给客户......
  • 请求的HTTP协议
    请求分为GET请求,POST请求GET请求  1.请求行  请求方式 GET  请求的资源路径  请求的协议版本号 HTTP/1.12.请求头  key:value 组成  不......
  • Servlet+Jsp—查、删
    Servlet+Jsp—查、删从一开始的网络编程(TCP编程对Socket进行监听,到HTTP编程),现在终于可以使用强大的API进行JavaEE编程了,Servlet底层封装了各种网络协议的处理,使我们不再深......
  • 案例体验HTTP2.0多路复用
    大家好,我是[小鑫同学]。一位长期从事前端开发的编程爱好者,我信奉编程最重要的是分享。请跟随小鑫同学的步伐,一起带你畅游不一样的前端世界~HTTP协议经历了20多年的演进在......
  • http hook
    classXMLHttp{request=function(param){};response=function(param){};}lethttpCopy=newXMLHttp();//初始化拦截XMLHttpRequestf......
  • jsp 学习
    <%@pageimport="java.util.ArrayList"%><%@pageimport="java.util.HashMap"%><%@pagecontentType="text/html;charset=UTF-8"language="java"%><%@taglibpr......
  • 爬虫-aiohttp
     #-*-coding:utf-8-*-importrequestsimportasyncioimporttimeimportaiohttp'''-aiohttp-是一个支持异步的网络请求模块-pipinstallaiohttp......
  • BLYNK 之http api 测试
    搭了个BLYNK服务器想了解BLYNK之httpapi,由于所搭建的BLYNK服务器版本和当前blynk官网的版本不一致,没有找到相应资料。最后在网上找到了一篇https://blog.csdn.net/u0136......
  • SAP 电商云 Spartacus UI Angular UI 和 Accelerator JSP UI 的混合使用
    Spartacus在技术和架构(library发布方式vs模板发布方式,headlessvsembedded,AngularvsJSP技术栈)等各方面,都是一种全面的从Accelerator的完整范式转变。因此,对于C......