`
bluky999
  • 浏览: 720268 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

HTTP协议上的文件上传

阅读更多

1 HTTP协议上的文件上传,最频繁的应用场景了。 RFC1867里定义的标准HTTP协议POST报文格式如下:

 

 

HEADER:

 

 写道
......
Content-Type: multipart/form-data;
 

 

BODY:

 

Content-type: multipart/form-data, boundary=AaB03x

        --AaB03x
        content-disposition: form-data; name="field1"

        Joe Blow
        --AaB03x
        content-disposition: form-data; name="pics"
        Content-type: multipart/mixed, boundary=BbC04y

        --BbC04y
        Content-disposition: attachment; filename="file1.txt"

 

 

注释:

1 传文件的时候 使用的Media Type name: multipart , Media subtype name: form-data

2 boundary用来标识分割不同的field,其中文件是一个特殊的field

3 多个文件的时候得继续制定 Content-type: multipart/mixed ,同时定义新的 boundary

4 不同的field注意区分 Content-disposition 的值,是 form/data 还是 attachment

5 这里定义的是POST方式的上传,不针对PUT 。

 

 

2 如果需求非常确定每次请求只上传一个文件,那么我们可以不使用HTTP约定的这种方式,而改用一种更简单直接的方式:

 

- 在 HEDER 里的 POST 后的URL里携带普通参数 field

- 在 BODY里直接装在要上传的文件内容,抛弃任何格式等约束

- 服务端直接从BODY里读取流数据保存为文件,其他参数从URL里读取

 

这样以来HTTP报文就类似:

 

HEDER

 

 写道
POST /HttpFileServer/upload?filename=nodexy.zip&fid=t01 HTTP/1.1
Host: www.yangzt.com:9190
Content-Length: xxxxx
 

BODY

 

 写道
文件内容

 

注释:

1 这不是标准的文件上传方式,但仍然是标准的HTTP报文

2 这种私有约定的方式,需要服务端和客户端同时特异化处理

3 针对每次请求只传一个文件的需求,这样改良后就会比较简洁,至于效率上是否有明显差别还不得而知,未做测试对比

 

 

3 总结:

 

在HTTP协议这一层上做文件的上传下载,也是很常见的方式,尤其很多移动应用里会采用;因为对客户端来说打开一个URL来GET或POST数据,相比打开一个scocke连接来读取或写入数据要简单得多,实现也快捷高效。

 

HTTP协议上的上传下载,也可以轻松实现断点续传,和进度反馈等,主要依赖length和range两个值。所以作为标准考虑,一定要明确地设置header里的length属性 --- 如果不设置,对于一般浏览器来说无碍,仍然可以成功下载,但是对于诸如libcurl这样的类库来说则无法取到数据。

 

另外,TCP协议层上的文件上传下载,也是很常见的应用场景,改日再次涉及另作详谈。

 

0
0
分享到:
评论
1 楼 bluky999 2011-11-21  
以上2中提到的改良策略,是无法直接在客户端使用 HttpClient 或在服务端使用common-upload等现有模块来实现的,因为封装越多则灵活性也越低。 所以建议直接面向 HTTP协议编程,客户端使用 HttpUrlConnection 。

相关推荐

    http协议文件上传

    文件上传功能是HTTP协议中的一个重要应用,允许用户在Web应用中上传本地文件到服务器。Java作为一种强大的编程语言,提供了多种方式来实现HTTP协议的文件上传功能。在这个场景下,我们通常会用到原生态的三层架构,...

    通过http协议上传文件

    在IT行业中,通过HTTP协议上传文件是一项常见的任务,特别是在web应用和桌面应用程序的交互中。...理解这些知识点对于开发涉及文件上传的系统至关重要。通过实践和学习提供的示例代码,你可以更好地掌握这一技术。

    文件上传断点续传协议

    文件上传断点续传协议是一种高效且可靠的文件上传机制,尤其适用于处理大文件和网络不稳定的情况。该协议的实现基于Python和JavaScript,采用一发一回的通信方式,确保了客户端与服务器之间的交互效率和准确性。它...

    vc++ 实现http协议文件上传

    用vc++在http协议下实现文件的上传和下载 里面包含的几个文档可供大家研究

    c++ 实现 http 协议 上传下载文件

    c++ 实现,在 linux 平台测试通过,windows 上原理是一样的,下载上传大文件没有问题,

    在单片机上实现http upload 小文件上传

    在单片机上实现HTTP Upload小文件上传是一项技术性较强的工作,主要涉及到嵌入式系统、网络通信协议以及操作系统任务管理等多方面的知识。这里我们将深入探讨如何在单片机环境中,利用C语言和HTTP POST方法来实现这...

    C++使用 CHttpFile类,实现HTTP协议下请求数据,实现HTTP协议下多文件上传!VS2013开发,可直接运行!

    在这个项目中,我们关注的是通过HTTP协议进行数据交换,特别是涉及多文件上传。以下是对这个项目及其相关知识点的详细说明: 首先,`CHttpFile` 是Microsoft的MFC(Microsoft Foundation Classes)库中的一个类,它...

    vc++实现http协议的文件上传和数据下载

    本文将深入探讨如何使用VC++来实现HTTP协议的文件上传和数据下载功能。 首先,我们需要理解HTTP协议的基本原理。HTTP是一个基于TCP/IP的应用层协议,它定义了客户端(如Web浏览器)和服务器之间交换数据的格式和...

    多线程上传文件,客户端http协议上传文件,客户端webserver上传文件,分割上传到服务器,模拟百度网盘文件上传

    客户端文件续传上传到服务端,客户端http协议上传文件,客户端webserver上传文件,客户端续传,分割上传到服务器,模拟百度网盘文件上传 由于项目的需要一个客户端用来上传文件的,所以今天做了一个简单的例子

    http协议上传文件

    在MFC中实现HTTP文件上传可以帮助开发者创建自定义的客户端应用程序,以与Web服务进行交互。 HTTP协议主要包含两种请求方法:GET和POST。GET方法常用于获取资源,而POST方法则用于提交数据,包括上传文件。在C++中...

    C#通过winform和http上传文件

    而通过HTTP协议进行文件上传是网络应用中的常见需求。本知识点将详细介绍如何利用C#的WinForm界面和HTTP协议来实现文件上传功能。 首先,理解WinForm。WinForm是.NET Framework提供的一种用于构建桌面应用程序的...

    http文件上传及下载

    HTTP(超文本传输协议)是互联网上应用最为广泛的一种网络协议,用于从万维网服务器传输超文本到本地浏览器的传输协议。在这个场景下,我们将关注如何使用HTTP协议来实现文件的上传和下载。 文件上传通常涉及到...

    linux c 通过http 协议 ,上传文件到服务器 源码

    linux c 通过http 协议 ,上传文件到服务器 源码

    http多文件上传

    一、HTTP协议与文件上传 HTTP(超文本传输协议)是互联网上应用最广泛的一种网络协议,用于从万维网服务器传输超文本到本地浏览器。在HTTP协议中,文件上传通常通过POST请求实现。POST请求允许客户端发送数据到...

    android通过HTTP协议上传文件至远程服务器

    本文将详细讲解如何使用HTTP协议在Android客户端实现文件上传,并涉及服务器端的相关设置。 首先,我们需要了解HTTP协议。HTTP(超文本传输协议)是一种用于分布式、协作式和超媒体信息系统的应用层协议,是互联网...

    http下载和上传文件 c++ 封装类

    HTTP是一种应用层协议,用于在Web上交换各种类型的数据。它基于请求-响应模型,客户端发送请求到服务器,服务器接收到请求后返回响应。在C++中,通过自定义类来封装HTTP操作可以简化网络编程,并提供更友好的API供...

    HTTP协议上传文件工具

    配置http协议上传文件的工具,并且附有安装说明!

    大文件在线上传(HTTP协议)

    本项目名为“大文件在线上传(HTTP协议)”,是利用Java编程语言开发的,结合了Tomcat服务器进行部署,旨在提供一个高效且稳定的大文件上传与下载平台。以下是关于这个项目及其涉及的技术点的详细说明: 1. **HTTP...

    android手写Http协议上传文件

    在Android开发中,有时我们需要实现自定义的HTTP通信,尤其是涉及到文件上传的场景。"android手写Http协议上传...在实现自定义HTTP协议时,务必注意网络连接的管理和数据传输的效率,以提供稳定可靠的文件上传服务。

Global site tag (gtag.js) - Google Analytics