【Content-Type詳解、Postman中binary格式、json格式數據轉原始二進制流等】

Content-Type詳解、Postman中binary格式、json格式數據轉原始二進制流等

    • 背景:
      • postman中如何使用binary格式上傳文件
  • Content-Type
      • Content-Type的格式由三部分組成:
      • 以下是一些常見的Content-Type示例:
  • Postman中 binary格式
      • 定義:
      • 用途:
      • 特點:
    • JSON數據轉換為二進制數據

背景:

前端拿到數據大對象后,post請求傳給后端。

postman中如何使用binary格式上傳文件

打開Postman:啟動Postman應用程序。
創建請求:在Postman中新建一個POST請求,并輸入目標API的URL。
選擇Body標簽:在請求窗口中,點擊“Body”標簽頁。
選擇binary格式:在Body標簽頁中,從下拉菜單中選擇“binary”作為請求體的格式。
上傳文件:點擊“Select Files”按鈕,從本地文件系統中選擇要上傳的二進制文件。或者,如果文件已經在Postman的文件管理器中,可以直接選擇它。
發送請求:配置完成后,點擊“Send”按鈕發送請求。Postman會將選定的二進制文件作為請求體發送到服務器。

Content-Type

Content-Type的格式由三部分組成:

主類型(type)、子類型(subtype)和可選參數(parameter)。

主類型(type):
任意字符串,表示媒體的大類,如text、image、application等。其中,如果是“*”號則代表所有類型。
text:用于標準化地表示的文本信息,文本消息可以是多種字符集或者多種格式。
Multipart:用于連接消息體的多個部分構成一個消息,這些部分可以是不同類型的數據流的形式,常用于上傳大型文件。
Application:用于傳輸應用程序數據或者二進制數據,日常前后端傳輸數據常用。
Message:用于包裝一個E-mail消息。
Image:用于傳輸靜態圖片數據。
Video:用于傳輸動態影像數據,可以是與音頻編輯在一起的視頻數據格式。

子類型(subtype):
任意字符串,表示媒體的具體類型,如html、jpeg、json等,用“/”與主類型隔開。其中,如果是“*”號則代表所有類型。常見的subtype有text/html、application/x-www-form-urlencoded、application/json、multipart/form-data、application/xml、text/plain、text/css、text/javascript等。

可選參數(parameter):
指定額外的信息,如字符集編碼(charset)、boundary等。
charset:指定字符編碼的標準,常見的有ISO-8859-1、UTF-8、GB2312、ASCII等。
boundary:多用于上傳文件時使用,用于分割數據。當content-type為multipart/form-data類型時,需要用boundary指定分隔符。

以下是一些常見的Content-Type示例:

  • HTML文檔標記:text/html

  • 普通ASCII文檔標記:text/plain

  • JPEG圖片標記:image/jpeg

  • GIF圖片標記:image/gif

  • JavaScript文檔標記:application/javascript

  • XML文件標記:application/xml

  • PDF文檔:application/pdf

  • 任意二進制數據(通常用于文件下載)application/octet-stream

  • JSON格式的數據application/json 在表單中進行文件上傳或發送包含文件以及非 ASCII 字符的表單數據
    axios默認的Content-Type,適用于發送JSON格式的數據。在發送JSON數據時,可以直接將 JavaScript對象傳遞給axios,axios會自動將其序列化為JSON字符串?。
    一種越來越流行的數據交換格式,用于傳輸結構化數據。與 application/x-www-form-urlencoded 相比,它支持更復雜的數據結構,并且更適合與 RESTful API 交互。

  • URL編碼的表單數據application/x-www-form-urlencoded
    特點:鍵值對形式的數據結構清晰明;大部分服務器和編程語言都支持該編碼方式;不適合 傳輸大量數據及復雜數據結構。
    使用:當需要以鍵值對的形式發送數據(登錄、注冊的簡單表單數據;一些傳統的 Web 服務)時可使用。
    可以通過使用qs庫將js對象序列化為 URL 查詢字符串。

    import qs from 'qs';
    var data = {a:1,b:2}
    axios.post(url, qs.stringify(data, { indices: true }));
    配置選項 indices 的作用是,當對象包含數組時,是否在鍵中包含數組索引。
    

    輸出 a=1&b=2&c[0]=z&c[1]=y 這樣可以將對象序列化為key=value&key=value的形式?1 2。

  • 用于上傳文件或包含文件的表單數據multipart/form-data?
    用途:是一種MIME 類型。主要用于 POST 請求中,將表單數據和文件打包發送給服務器。它是 HTML 表單中文件上傳的默認編碼類型,當表單的 enctype 屬性設置為 multipart/form-data 時,瀏覽器會以該編碼方式提交表單;
    在與 RESTful API 交互時,如果 API 需要接收文件或多種類型的表單數據,通常也會使用 multipart/form-data 編碼方式。
    示例

    <form action="/upload" method="POST" enctype="multipart/form-data"><input type="text" name="username"><input type="file" name="file"><button type="submit">上傳</button>
    </form>
    
    通過 Axios 發送一個包含文件和其他字段的 POST 請求:// 創建一個FormData實例
    const formData = new FormData();
    // 向FormData中添加數據
    // 假設我們有一個文件輸入元素,其files屬性包含用戶所選文件
    // const fileInput = document.querySelector('input[type="file"]');
    // formData.append('file', fileInput.files[0]); // 從文件輸入中獲取文件并添加到formData中// 為了演示目的,我們創建了一個Blob對象來模擬文件上傳。
    const fakeFile = new Blob(['Hello, world!'], { type: 'text/plain' });
    formData.append('file', fakeFile, 'example.txt'); // 添加文件到formData,并指定文件名
    //添加其他非文件字段
    formData.append('username', 'JohnDoe');
    formData.append('email', 'johndoe@example.com');// 使用Axios發送POST請求
    axios.post('https://example.com/upload', formData, {headers: {// Axios會自動為FormData設置Content-Type為multipart/form-data// 但你可以在這里添加其他自定義頭部信息'X-Custom-Header': 'SomeValue'// 注意:不要手動設置Content-Type頭,Axios會為你處理// 'Content-Type': 'multipart/form-data' // 這行應該被注釋掉或刪除}
    })
    .then(response => {console.log('上傳成功:', response.data);
    })
    .catch(error => {console.error('上傳失敗:', error);
    });
    

    與 application/x-www-form-urlencoded 相比,它支持傳輸二進制文件,并且不受 URL 長度的限制。

在實際應用中,正確設置Content-Type對于確保數據在網絡上傳輸和處理的正確性至關重要。開發人員在開發過程中應注意客戶端發送請求和服務器響應時的Content-Type設置,以確保數據的正確解析和處理。

Postman中 binary格式

定義:

binary格式在Postman中對應著HTTP請求中的Content-Type: application/octet-stream,表示發送的是原始的二進制數據流。

用途:

主要用于上傳圖片、音頻、視頻、文檔等二進制文件到服務器。

特點:

無鍵值對: 與form-data和x-www-form-urlencoded等格式不同,binary格式不依賴于鍵值對來組織數據。它直接上傳文件的二進制內容,因此一次通常只能上傳一個文件。

文件類型: 確保選擇的文件是二進制文件,如圖片、音頻、視頻等。非二進制文件(如文本文件)雖然也可以以二進制形式發送,但可能不是最佳實踐。
文件大小: 檢查服務器對上傳文件的大小限制。如果文件過大,可能會導致上傳失敗或服務器錯誤。
Content-Type: 雖然Postman會自動為binary格式設置Content-Type為application/octet-stream,但在某些情況下,服務器可能期望特定的Content-Type。如果遇到這種情況,可以在Headers選項卡中手動設置Content-Type。

JSON數據轉換為二進制數據

要將JSON數據轉換為二進制數據,你需要先將JSON字符串編碼為字節序列(例如,使用UTF-8編碼),然后將這些字節序列封裝成某種二進制格式(如ArrayBuffer或Blob)。

  1. .將JSON對象轉換為字符串(如果它還不是字符串):
const jsonObj = { key: "value", num: 123 };
const jsonString = JSON.stringify(jsonObj);
  1. 使用TextEncoder將JSON字符串編碼為Uint8Array(這是UTF-8編碼的字節序列):
const encoder = new TextEncoder();
const uint8Array = encoder.encode(jsonString);
  1. (可選)將Uint8Array轉換為ArrayBuffer
const arrayBuffer = uint8Array.buffer;
  1. (可選)將Uint8Array(或ArrayBuffer)封裝為Blob(如果你需要創建一個可以下載或上傳的二進制文件):
const blob = new Blob([uint8Array], { type: 'application/json' });

現在,你已經有了一個表示JSON數據的二進制格式(ArrayBuffer或Blob)。

請求發送
設置axios請求頭:

 //post請求頭headers: {'Content-Type': 'application/json;charset=UTF-8;application/octet-stream',},
  • 示例:

在這個示例中,我們創建了一個隱藏的鏈接(a元素),設置了它的href屬性為指向blob的URL,并觸發了點擊事件來下載文件。下載完成后,我們釋放了URL對象以避免內存泄漏。

// 假設你有一個JSON對象
const jsonObj = { key: "value", num: 123 };// 將JSON對象轉換為字符串
const jsonString = JSON.stringify(jsonObj);// 使用TextEncoder將字符串編碼為Uint8Array(UTF-8編碼)
const encoder = new TextEncoder();
const uint8Array = encoder.encode(jsonString);// 將Uint8Array轉換為ArrayBuffer(如果需要)
const arrayBuffer = uint8Array.buffer;// 將Uint8Array(或ArrayBuffer)封裝為Blob(如果需要)
const blob = new Blob([uint8Array], { type: 'application/json' });// 現在你可以使用arrayBuffer或blob進行進一步的操作,例如通過XMLHttpRequest或Fetch API發送數據
// 或者創建一個指向blob的URL并下載它
const url = URL.createObjectURL(blob);
const a = document.createElement('a');
a.style.display = 'none';
a.href = url;
a.download = 'data.json';
document.body.appendChild(a);
a.click();
window.URL.revokeObjectURL(url);

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/70417.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/70417.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/70417.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

DeepSeek等大模型功能集成到WPS中的詳細步驟

記錄下將**DeepSeek功能集成到WPS中**的步驟&#xff0c;以備忘。 1. 下載并安裝OfficeAI插件 訪問OfficeAI插件下載地址&#xff1a;https://www.office-ai.cn/&#xff0c;下載插件&#xff08;目前只支持windows系統&#xff09;。 注意&#xff0c;有兩個插件&#xff0…

MATLAB學習之旅:從入門到基礎實踐

在當今科技飛速發展的時代,MATLAB作為一款強大的數學軟件,猶如一把神奇的鑰匙,能夠打開眾多領域的大門。無論是工程計算、數據分析,還是算法開發、可視化呈現,MATLAB都展現出了無與倫比的魅力。今天,就讓我們踏上這段奇妙的MATLAB學習之旅,從最基礎的部分開始,逐步探索…

在Ubutu18.04下搭建nfs服務器

在Ubutu18.04下搭建nfs服務器 主要參考這篇博客 Ubuntu18.04下安裝NFS詳細步驟_烏班圖安裝nfs-CSDN博客 1.安裝NFS服務&#xff1a; 服務器端&#xff1a; sudo apt install nfs-kernel-server

棧,優先級隊列,map,set

文章目錄 棧題目解析代碼 優先級隊列題解代碼 map題解代碼 set題解代碼 棧 題目解析 1.先把元素push進棧中&#xff0c;如果棧非空并且棧中的元素按順序和k相等就出棧&#xff0c;直到棧為空或者k ! sk.top() 代碼 #include<iostream> #include<stack> #include&l…

C++ Primer 類的靜態成員

歡迎閱讀我的 【CPrimer】專欄 專欄簡介&#xff1a;本專欄主要面向C初學者&#xff0c;解釋C的一些基本概念和基礎語言特性&#xff0c;涉及C標準庫的用法&#xff0c;面向對象特性&#xff0c;泛型特性高級用法。通過使用標準庫中定義的抽象設施&#xff0c;使你更加適應高級…

Java——super

在Java中&#xff0c;super關鍵字用于引用父類的成員&#xff08;屬性、方法或構造器&#xff09;。它在繼承關系中非常重要&#xff0c;主要用于以下幾種場景&#xff1a; 1. 調用父類的構造器 在子類的構造器中&#xff0c;可以使用super關鍵字調用父類的構造器。super()必須…

Unity 全局屏幕點擊特效

思路&#xff1a; 1、生成一個點擊特效實例&#xff0c;每點擊屏幕&#xff0c;就調整特效實例的位置并控制特效的顯隱狀態即可。 2、需要注意要保證在編輯器開發時或手機上運行時都要顯示點擊效果。 方案一 &#xff08;推薦&#xff09; using UnityEngine; using UnityEn…

什么是業務流程分類框架

業務流程分類框架是一個用于組織和系統化地分類業務流程的結構化方法。它旨在幫助企業理解、管理、分析和改進其運營流程。 可以把它想象成一個圖書館的圖書分類系統&#xff0c;幫助快速找到和理解不同類型的書籍。對于業務流程來說&#xff0c;分類框架幫助快速了解不同類型的…

基于springboot校園健康系統的設計與實現(源碼+文檔)

大家好我是風歌&#xff0c;今天要和大家聊的是一款基于springboot的園健康系統的設計與實現。項目源碼以及部署相關請聯系風歌&#xff0c;文末附上聯系信息 。 項目簡介&#xff1a; 基于springboot校園健康系統的設計與實現的主要使用者管理員具有最高的權限&#xff0c;通…

【Leetcode】平衡二叉樹

平衡二叉樹 題目 思路與代碼實現 常規解法&#xff1a; int max(int a,int b){return a>b?a:b;}int maxDepth(struct TreeNode* root) {if(rootNULL)return 0;return 1max(maxDepth(root->left),maxDepth(root->right)); }bool isBalanced(struct TreeNode* root)…

【AI實踐】阿里百煉文本對話Agent安卓版搭建

環境&#xff1a;安卓手機運行環境&#xff1b;WinsurfAI編程工具&#xff1b;阿里百煉提前創建Agent應用&#xff1b; 耗時&#xff1a;2小時&#xff1b; 1&#xff0c;新建安卓項目 完成文本輸入&#xff0c;并將輸入的文字顯示出來。 2&#xff0c;安裝SDK 參考文檔 安…

一文讀懂Docker之Docker Compose

目錄 一、Docker Compose簡介 二、Docker Compose的安裝和基本使用 1、Docker Compose的安裝 步驟一、下載docker-compose 步驟二、新增可執行權限 步驟三、查看是否安裝成功 2、Docker Compose的基本使用 (1)、docker-compose up (2)、docker-compose ps (3)、docke…

WordPress“更新失敗,響應不是有效的JSON響應”問題的修復

在使用WordPress搭建網站時&#xff0c;許多人在編輯或更新文章時&#xff0c;可能會遇到一個提示框&#xff0c;顯示“更新失敗&#xff0c;響應不是有效的JSON響應”。這個提示信息對于不了解技術細節的用戶來說&#xff0c;太難懂。其實&#xff0c;這個問題并不復雜&#x…

信息學奧賽一本通 1973 【16NOIP普及組】買鉛筆 | 洛谷 P1909 [NOIP 2016 普及組] 買鉛筆

【題目鏈接】 ybt 1973 【16NOIP普及組】買鉛筆 洛谷 P1909 [NOIP 2016 普及組] 買鉛筆 【題目考點】 1. 簡單數學 2. 數組 3. 向上取整 <cmath>中有函數double ceil(double x)&#xff0c;求x向上取整的值。 如果求正整數 ? a b ? \lceil \frac{a}{b} \rceil ?…

C++中的.*運算符

看運算符重載的時候&#xff0c;看到這一句 .* :: sizeof ?: . 注意以上5個運算符不能重載。 :: sizeof ?: . 這四個好理解&#xff0c;畢竟都學過&#xff0c;但.*是什么&#xff1f; 于是自己整理了一下 .* 是一種 C 中的運算符&#xff0c;稱為指針到成…

【JavaEE進階】MyBatis通過注解實現增刪改查

目錄 &#x1f343;前言 &#x1f340;打印日志 &#x1f334;傳遞參數 &#x1f38b;增(Insert) &#x1f6a9;返回主鍵 &#x1f384;刪(Delete) &#x1f332;改(Update) &#x1f333;查(Select) &#x1f6a9;起別名 &#x1f6a9;結果映射 &#x1f6a9;開啟駝…

【分布式理論14】分布式數據庫存儲:分表分庫、主從復制與數據擴容策略

文章目錄 一、分表分庫1. 數據分表的必要性與方式2. 數據分庫原則與優勢 二、主從復制1. 讀寫分離架構設計2. 數據復制方式3. MySQL實現主從復制4. MySQL主從復制實踐與高可用方案 三、數據擴容 隨著業務的不斷發展和數據量的增長&#xff0c;傳統的單機關系型數據庫已經逐漸不…

vxe-grid 通過配置式給單元格字段格式化樹結構數據,轉換樹結構節點

vxe-grid 通過配置式給單元格字段格式化樹結構數據&#xff0c;轉換樹結構節點 比如用戶自定義配置好的數據源&#xff0c;通過在列中配置好數據&#xff0c;全 json 方式直接返回給前端渲染&#xff0c;不需要寫任何格式化方法。 官網&#xff1a;https://vxetable.cn npm i…

延遲任務的11種實現方式(下)!!

接上文&#xff1a; Redisson的RDelayedQueue Redisson他是Redis的兒子&#xff08;Redis son&#xff09;&#xff0c;基于Redis實現了非常多的功能&#xff0c;其中最常使用的就是Redis分布式鎖的實現&#xff0c;但是除了實現Redis分布式鎖之外&#xff0c;它還實現了延遲…

BS5852英國家具防火安全條款主要包括哪幾個方面呢?

什么是BS5852檢測&#xff1f; BS5852是英國針對家用家具的強制性安全要求&#xff0c;主要測試家具在受到燃燒香煙和火柴等火源時的可燃性。這個標準通常分為四個部分進行測試&#xff0c;但實際應用中主要測試第一部分和第二部分&#xff0c;包括煙頭測試和利用乙炔火焰模擬…