「Content-Type: multipart/form-data」で投稿
「Content-Type:」で POST リクエストを送信しようとしたときmultipart/form-data」を実行すると、「[301 301 Moved Permanently]」のようなエラー メッセージが表示される場合があります。この問題は通常、バイト パラメータと文字列引数を API に POST しようとしたときに発生します。
このエラーを解決し、multipart/form-data を使用した POST リクエストを正常に実行するには、Go コードを次のように変更します。
func NewPostFile(url string, paramTexts map[string]interface{}, paramFile FileItem) ([]byte, error) {
// Create a multipart body buffer and writer
bodyBuf := &bytes.Buffer{}
bodyWriter := multipart.NewWriter(bodyBuf)
// Add string parameters
for k, v := range paramTexts {
bodyWriter.WriteField(k, v.(string))
}
// Add file parameter
fileWriter, err := bodyWriter.CreateFormFile(paramFile.Key, paramFile.FileName)
if err != nil {
return nil, err
}
fileWriter.Write(paramFile.Content)
// Set content type
contentType := bodyWriter.FormDataContentType()
// Close the writer
bodyWriter.Close()
resp, err := http.Post(url, contentType, bodyBuf)
if err != nil {
return nil, err
}
defer resp.Body.Close()
// Handle response status
if resp.StatusCode = 300 {
b, _ := ioutil.ReadAll(resp.Body)
return nil, fmt.Errorf("[%d %s]%s", resp.StatusCode, resp.Status, string(b))
}
// Read response data
respData, err := ioutil.ReadAll(resp.Body)
if err != nil {
return nil, err
}
return respData, nil
}
// Define FileItem type to represent file parameters
type FileItem struct {
Key string // e.g. "image_content"
FileName string // e.g. "test.jpg"
Content []byte // Byte array of the file
}
この更新されたコードは、マルチパート ライターで multipart/form-data コンテンツ タイプを使用して、POST リクエストを正しく構築します。 API URL、パラメータ テキスト マップ、ファイル アイテムを NewPostFile 関数に指定すると、リクエストを正常に実行できます。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3