"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > []बाइट पैरामीटर्स और स्ट्रिंग तर्कों का उपयोग करके सामग्री-प्रकार: मल्टीपार्ट/फॉर्म-डेटा के साथ एपीआई पर कैसे पोस्ट करें?

[]बाइट पैरामीटर्स और स्ट्रिंग तर्कों का उपयोग करके सामग्री-प्रकार: मल्टीपार्ट/फॉर्म-डेटा के साथ एपीआई पर कैसे पोस्ट करें?

2024-11-21 को प्रकाशित
ब्राउज़ करें:533

How to Post to an API with Content-Type: multipart/form-data Using []byte Parameters and String Arguments?

सामग्री-प्रकार के साथ एक एपीआई पर पोस्ट करना: मल्टीपार्ट/फॉर्म-डेटा

सामग्री-प्रकार की आवश्यकता वाले एपीआई पर पोस्ट करने का प्रयास करते समय: मल्टीपार्ट/फॉर्म-डेटा, यदि आप []बाइट पैरामीटर और स्ट्रिंग तर्क का उपयोग कर रहे हैं तो आपको समस्याएं आ सकती हैं। प्रदान किया गया त्रुटि संदेश एक पुनर्निर्देशन समस्या को इंगित करता है, जो मौजूदा समस्या से असंबंधित है।

समाधान मल्टीपार्ट पैकेज का उपयोग करके मल्टीपार्ट/फॉर्म-डेटा अनुरोध निकाय के निर्माण में निहित है। यहाँ एक उदाहरण है:

package main

import (
    "bytes"
    "fmt"
    "io"
    "io/ioutil"
    "mime/multipart"
    "net/http"

    "github.com/ganshane/typeregistry"
)

type FileItem struct {
    Key      string //image_content
    FileName string //test.jpg
    Content  []byte //[]byte
}

func NewPostFile(url string, paramTexts map[string]interface{}, paramFile FileItem) ([]byte, error) {
    // Construct the multipart request body

    bodyBuf := &bytes.Buffer{}
    bodyWriter := multipart.NewWriter(bodyBuf)

    for k, v := range paramTexts {
        bodyWriter.WriteField(k, v.(string))
    }
    fileWriter, err := bodyWriter.CreateFormFile(paramFile.Key, paramFile.FileName)
    if err != nil {
        fmt.Println(err)
        //fmt.Println("Create form file error: ", error)
        return nil, err
    }
    fileWriter.Write(paramFile.Content)
    contentType := bodyWriter.FormDataContentType()
    bodyWriter.Close()
    fmt.Println(bodyBuf.String())

    // Perform the POST request

    resp, err := http.Post(url, contentType, bodyBuf)
    if err != nil {
        return nil, err
    }
    defer resp.Body.Close()
    fmt.Println(resp)

    // Handle the response

    if resp.StatusCode = 300 {
        b, _ := ioutil.ReadAll(resp.Body)
        return nil, fmt.Errorf("[%d %s]%s", resp.StatusCode, resp.Status, string(b))
    }
    respData, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        return nil, err
    }
    fmt.Println(string(respData))
    return respData, nil
}

func main() {
    m := make(map[string]interface{}, 0)
    m["fileName"] = "good"
    m["name"] = typeregistry.Base64ToByte("/9j/4AAQSkZJRgABAQEAeAB4AAD/2wBDAAIBAQIBAQICAgICAgICAwUDAwMDAwYEBAMFBwYHBwcGBwcICQsJCAgKCAcHCg0KCgsMDAwMBwkODw0MDgsMDAz/2wBDAQICAgMDAwYDAwYMCAcIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAz/wAARCAABAAEDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4 Tl5ufo6erx8vP09fb3 Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3 Pn6/9oADAMBAAIRAxEAPwDHooor wD Zz//2Q==")

    paramFile := FileItem{
        Key:      "image_content",
        FileName: "test.jpg",
        Content:  m["name"].([]byte),
    }

    respData, err := NewPostFile("API_URL", m, paramFile)
    if err != nil {
        // Handle error
    }

    fmt.Println(string(respData))
}

इस उदाहरण में, हमने मल्टीपार्ट/फॉर्म-डेटा के साथ एक POST अनुरोध बनाने के लिए न्यूपोस्टफाइल फ़ंक्शन का उपयोग किया, जिसमें नियमित फॉर्म फ़ील्ड और फ़ाइल दोनों शामिल हैं। फ़ंक्शन इनपुट के रूप में URL, स्ट्रिंग तर्कों का एक मानचित्र और एक फ़ाइल आइटम लेता है।

एपीआई से प्रतिक्रिया को respData वैरिएबल से पुनर्प्राप्त किया जा सकता है और आवश्यकतानुसार संसाधित किया जा सकता है। त्रुटि प्रबंधन और प्रतिक्रिया प्रबंधन कोड को उनकी विशिष्ट आवश्यकताओं के अनुसार लागू करने के लिए डेवलपर पर छोड़ दिया जाता है।

इस समाधान को उस समस्या का समाधान करना चाहिए जिसे आप सामग्री-प्रकार: मल्टीपार्ट/फॉर्म-डेटा का उपयोग करके एपीआई पर पोस्ट करने के साथ अनुभव कर रहे थे। []बाइट पैरामीटर और स्ट्रिंग तर्क के साथ।

नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3