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