النشر إلى واجهة برمجة التطبيقات باستخدام نوع المحتوى: بيانات متعددة الأجزاء/النموذج
عند محاولة النشر إلى واجهة برمجة التطبيقات التي تتطلب نوع المحتوى: بيانات متعددة الأجزاء/النموذج، قد تواجه مشكلات إذا كنت تستخدم []معلمات البايت ووسائط السلسلة. تشير رسالة الخطأ المقدمة إلى مشكلة في إعادة التوجيه، وهي غير مرتبطة بالمشكلة المطروحة.
يكمن الحل في إنشاء نص طلب بيانات متعدد الأجزاء/نموذج باستخدام الحزمة متعددة الأجزاء. إليك مثال:
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))
}
في هذا المثال، استخدمنا وظيفة NewPostFile لإنشاء طلب POST باستخدام بيانات متعددة الأجزاء/النموذج، بما في ذلك حقول النموذج العادية والملف. تأخذ الوظيفة عنوان URL، وخريطة وسيطات السلسلة، وعنصر ملف كمدخلات.
يمكن استرداد الاستجابة من واجهة برمجة التطبيقات (API) من متغير respData ومعالجتها حسب الحاجة. يتم ترك رمز معالجة الأخطاء ومعالجة الاستجابة للمطور لتنفيذه وفقًا لمتطلباته المحددة.
يجب أن يعالج هذا الحل المشكلة التي كنت تواجهها عند النشر إلى واجهة برمجة التطبيقات باستخدام نوع المحتوى: بيانات متعددة الأجزاء/النموذج مع []معلمات البايت ووسائط السلسلة.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3