」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 如何在 Golang 中解析來自 HTTP 請求的檔案和 JSON 資料?

如何在 Golang 中解析來自 HTTP 請求的檔案和 JSON 資料?

發佈於2024-11-13
瀏覽:644

How to Parse Files and JSON Data from an HTTP Request in Golang?

在Go 中解析來自HTTP 請求的文件和JSON 資料

在Web 應用程式中,在HTTP 請求中同時接收文件和JSON 資料是很常見的。要成功處理這些元素,必須了解如何有效地解析它們。

問題

考慮這樣一個場景,您有一個 AngularJS 前端向 Go 後端發送請求。該請求包含檔案(“file”)和 JSON 資料(“doc”)。您的目標是解析此請求中的 PDF 檔案和 JSON 資料。

解決方案

要解決此問題,您需要單獨處理文件和 JSON 資料。透過利用 http.(*Request).MultipartReader() 並使用 NextPart() 迭代各部分,您可以提取並解析每個元素。

第 1 步:建立 Multipart Reader

mr, err := r.MultipartReader()
if err != nil {
    http.Error(w, err.Error(), http.StatusInternalServerError)
    return
}

第 2 步:處理每個部分

對於多部分請求中的每個部分:

part, err := mr.NextPart()
if err == io.EOF {
    break
}
if err != nil {
    http.Error(w, err.Error(), http.StatusInternalServerError)
    return
}

第3步:提取檔案資料

如果零件是檔案(part.FormName() == "file"):

outfile, err := os.Create("./docs/"   part.FileName())
if err != nil {
    http.Error(w, err.Error(), http.StatusInternalServerError)
    return
}
defer outfile.Close()

_, err = io.Copy(outfile, part)
if err != nil {
    http.Error(w, err.Error(), http.StatusInternalServerError)
    return
}

第4步:解析JSON資料

如果零件包含JSON資料(part.FormName() == "doc"):

jsonDecoder := json.NewDecoder(part)
err = jsonDecoder.Decode(&doc)
if err != nil {
    http.Error(w, err.Error(), http.StatusInternalServerError)
    return
}

第5 步:後處理

解析文件和JSON 資料後,您可以執行任何必要的後處理,例如將其保存到資料庫或向客戶端發送回應.

版本聲明 本文轉載於:1729747542如有侵犯,請洽[email protected]刪除
最新教學 更多>
  • Bootstrap 4 Beta 中的列偏移發生了什麼事?
    Bootstrap 4 Beta 中的列偏移發生了什麼事?
    Bootstrap 4 Beta:列偏移的刪除和恢復Bootstrap 4 在其Beta 1 版本中引入了重大更改柱子偏移了。然而,隨著 Beta 2 的後續發布,這些變化已經逆轉。 從 offset-md-* 到 ml-auto在 Bootstrap 4 Beta 1 中, offset-md-*...
    程式設計 發佈於2024-11-18
  • 如何在 PHP 中組合兩個關聯數組,同時保留唯一 ID 並處理重複名稱?
    如何在 PHP 中組合兩個關聯數組,同時保留唯一 ID 並處理重複名稱?
    在 PHP 中組合關聯數組在 PHP 中,將兩個關聯數組組合成一個數組是常見任務。考慮以下請求:問題描述:提供的代碼定義了兩個關聯數組,$array1 和 $array2。目標是建立一個新陣列 $array3,它合併兩個陣列中的所有鍵值對。 此外,提供的陣列具有唯一的 ID,而名稱可能重疊。要求是建...
    程式設計 發佈於2024-11-18
  • 大批
    大批
    方法是可以在物件上呼叫的 fns 數組是對象,因此它們在 JS 中也有方法。 slice(begin):將陣列的一部分提取到新數組中,而不改變原始數組。 let arr = ['a','b','c','d','e']; // Usecase: Extract till index ...
    程式設計 發佈於2024-11-18
  • 如何從針對 Go 二進位檔案的整合測試中擷取程式碼覆蓋率?
    如何從針對 Go 二進位檔案的整合測試中擷取程式碼覆蓋率?
    從 Go 二進位檔案擷取程式碼覆蓋率執行單元測試時,擷取程式碼覆蓋率非常簡單。然而,在針對二進位檔案本身的整合測試期間收集覆蓋率指標可能具有挑戰性。有沒有辦法克服這個障礙? 整合測試覆蓋率的需求整合測試提供了比單獨的單元測試更全面的程式碼覆蓋率視圖。透過針對真實世界的輸入運行二進位文件,我們可以評估...
    程式設計 發佈於2024-11-18
  • 儘管程式碼有效,為什麼 POST 請求無法擷取 PHP 中的輸入?
    儘管程式碼有效,為什麼 POST 請求無法擷取 PHP 中的輸入?
    解決PHP 中的POST 請求故障在提供的程式碼片段中:action=''而不是:action="<?php echo $_SERVER['PHP_SELF'];?>";?>"檢查$_POST數組:表單提交後使用var_dump檢查$_POST 陣列的內容。...
    程式設計 發佈於2024-11-18
  • 如何從終端機將資料庫匯入MySQL?
    如何從終端機將資料庫匯入MySQL?
    從終端導入MySQL資料庫使用終端將資料庫導入MySQL可以提供一種便捷的資料管理方式。要有效地執行此任務,請按照下列步驟操作:使用命令列,您可以存取 MySQL 提示符。這樣做的語法是:mysql -u username -p database_name輸入您的使用者名稱、密碼和目標資料庫名稱來取...
    程式設計 發佈於2024-11-18
  • 如何使用“index”函數迭代 HTML 模板中的平行數組?
    如何使用“index”函數迭代 HTML 模板中的平行數組?
    如何使用索引迭代HTML 模板中的平行數組本文解決了迭代並行數組(大小相等)的困難在HTML 模板中。具體來說,如何利用範圍區塊內的索引函數來實現此目的。 索引函數是預先定義的全域範本函數,它根據提供的索引從映射、切片或陣列中檢索項目。此函數允許在模板內的資料結構內進行複雜的導航。 在迭代並行數組的...
    程式設計 發佈於2024-11-18
  • 迭代 Python 列表時,為什麼應該避免刪除項目?
    迭代 Python 列表時,為什麼應該避免刪除項目?
    Python 列表:迭代期間刪除項目的陷阱迭代 Python 列表,同時刪除項目可能會導致意外行為。一個值得注意的例子如下:letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l'] for i in letters:...
    程式設計 發佈於2024-11-18
  • 如何消除 CSS 中的雙邊框:輪廓與負邊距?
    如何消除 CSS 中的雙邊框:輪廓與負邊距?
    防止 CSS 中的雙邊框許多 Web 開發人員在將元素與邊框並排設定樣式時遇到一個常見問題。由於邊框的性質,每個元素都有自己的邊框,因此元素相交處可能會出現雙邊框。這可能不雅觀並且會幹擾所需的設計。 要解決此問題,有兩種常見的解決方案:使用輪廓而不是邊框,或應用負邊距。 使用輪廓輪廓與邊框類似,但僅...
    程式設計 發佈於2024-11-18
  • 如何僅使用 CSS 將圖片嵌入 Div 元素內?
    如何僅使用 CSS 將圖片嵌入 Div 元素內?
    使用CSS 將影像整合到Div 中:有效的解決方案在Web 開發中,通常需要將影像放置在div 元素中。雖然使用背景圖像是一種常見的方法,但它限制了 div 符合圖像大小的能力。這就提出了一個問題:我們要如何使用 CSS 來建立與 HTML 結構 等效的內容? 為了實現這一點,我們利用內容屬性將圖...
    程式設計 發佈於2024-11-18
  • 如何傳遞可變數量的參數給 JavaScript 函數?
    如何傳遞可變數量的參數給 JavaScript 函數?
    向JavaScript 函數傳遞可變數量的參數JavaScript 在向函數傳遞參數方面提供了靈活性,包括從數組發送可變數量的參數的能力。 透過參數實作變數 Arity與 Python 一樣,JavaScript 有一個特殊的參數對象,它表示傳遞給函數的所有參數。該物件包含每個參數作為可索引屬性。例...
    程式設計 發佈於2024-11-18
  • 為什麼我無法使用擴充內容腳本將 CSS 注入網頁?
    為什麼我無法使用擴充內容腳本將 CSS 注入網頁?
    擴展內容腳本中的CSS 注入問題儘管在清單中定義了CSS 注入,您的CSS 文件在網頁中仍然不存在。以下是可能的原因和解決方案:原因: CSS 規則衝突樣式表已註入,但由於其他樣式覆蓋其規則而未應用。 解決方案:增加CSS特異性: 為您的 CSS 規則添加更具體的選擇器。 使用 "!im...
    程式設計 發佈於2024-11-18
  • 釋放你的 Python 能力:一個對獨特字元進行排序的項目
    釋放你的 Python 能力:一個對獨特字元進行排序的項目
    您準備好踏上迷人的 Python 程式設計之旅了嗎? LabEx.io「專案:刪除重複項」課程就是您的最佳選擇,您將在其中深入了解資料清理和預處理的世界。這種基於專案的學習體驗將使您具備從給定字串中刪除重複字元並按升序輸出處理後的字串的技能- 對於任何有抱負的Python 開發人員來說,這都是一項寶...
    程式設計 發佈於2024-11-18
  • 揭開謎底:如何解碼 java.lang.reflect.InvocatTargetException 之謎?
    揭開謎底:如何解碼 java.lang.reflect.InvocatTargetException 之謎?
    揭開java.lang.reflect.InitationTargetException 之謎在錯綜複雜的Java 程式設計世界中,人們可能會遇到以下令人困惑的問題: java.lang.reflect.InitationTargetException。這種異常在利用反射時經常遇到,可能會讓開發人員...
    程式設計 發佈於2024-11-18
  • 什麼是互斥鎖以及它在多執行緒環境中如何運作?
    什麼是互斥鎖以及它在多執行緒環境中如何運作?
    互斥體範例和說明互斥體或互斥物件提供了一種在多執行緒環境中控制對共享資源的訪問的機制。理解它們的操作可能具有挑戰性,因為它們的語法乍一看可能違反直覺。 互斥體語法pthread_mutex_lock(&mutex1) 的語法顯示互斥體本身正在被鎖定。然而,被鎖定的不是互斥鎖,而是受其保護的程式碼區域...
    程式設計 發佈於2024-11-18

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3