HTTP協議上的檔案上傳

2021-06-09 13:58:48 字數 1563 閱讀 9999

檔案上傳

tcp協議

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寫道

body寫道

檔案內容

注釋:

1 這不是標準的檔案上傳方式,但仍然是標準的http報文

2 這種私有約定的方式,需要服務端和客戶端同時特異化處理

3 針對每次請求只傳乙個檔案的需求,這樣改良後就會比較簡潔,至於效率上是否有明顯差別還不得而知,未做測試對比

3 總結:

HTTP 上傳檔案的協議格式

參考 一般設定方法為post 設定 content type multipart form data boundary 7d62bf2f9066c 其中boundary後面表示多個檔案之間的分隔符 然後在請求body中按如下例子格式填充資料 7d62bf2f9066c content disposi...

Android基於http協議多檔案上傳

實現多檔案的上傳,基於標準的http來實現。多檔案上傳myuploader類的實現 同步上傳多個檔案 基於標準的http實現,需要在非ui執行緒中呼叫,以免阻塞ui。public class myuploader dos.writebytes end fis.close dos.writebytes...

Http上傳檔案

http上傳檔案 設定引數 string boundary datetime.now.ticks.tostring x 隨機分隔線 request.contenttype multipart form data charset utf 8 boundary boundary byte itembou...