>  기사  >  백엔드 개발  >  Go\의 `mime/multipart` 및 `net/http` 패키지를 사용하여 파일과 함께 다중 부분 양식을 보내는 방법은 무엇입니까?

Go\의 `mime/multipart` 및 `net/http` 패키지를 사용하여 파일과 함께 다중 부분 양식을 보내는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-11-22 08:10:09137검색

How to Send Multipart Forms with Files Using Go's `mime/multipart` and `net/http` Packages?

HTTP-POST 파일 멀티파트

이 가이드는 Go 패키지 mime/multipart 및 http를 사용하여 멀티파트 양식을 보내는 솔루션을 제공합니다.

다음 HTML을 고려해보세요 마크업:

<html>
<head><title>Multipart Test</title></head>
<body>
<form action="/multipart" enctype="multipart/form-data" method="POST">

<label for="file"> Please select a File </label>
<input>

Go 구현의 경우:

import (
    "bytes"
    "io"
    "mime/multipart"
    "net/http"
    "os"
)

// Upload file to google code
func Upload(tarball string) (err os.Error) {
    // Create buffer
    buf := new(bytes.Buffer) // caveat IMO dont use this for large files, \
    // create a tmpfile and assemble your multipart from there (not tested)
    w := multipart.NewWriter(buf)
    // Create a form field writer for field label
    label, err := w.CreateFormField("label")
    if err != nil {
        return err
    }
    // Write label field
    label.Write([]byte("label here"))
    // Create a form field writer for field summary
    summary, err := w.CreateFormField("summary")
    if err != nil {
        return err
    }
    // Write summary field
    summary.Write([]byte("summary here"))
    // Create file field
    fw, err := w.CreateFormFile("upload", tarball)
    if err != nil {
        return err
    }
    fd, err := os.Open(tarball)
    if err != nil {
        return err
    }
    defer fd.Close()
    // Write file field from file to upload
    _, err = io.Copy(fw, fd)
    if err != nil {
        return err
    }
    // Important if you do not close the multipart writer you will not have a
    // terminating boundry
    w.Close()
    req, err := http.NewRequest("POST", repoUrl, buf)
    if err != nil {
        return err
    }
    req.Header.Set("Content-Type", w.FormDataContentType())
    req.SetBasicAuth("[email protected]", "password")
    res, err := client.Do(req)
    if err != nil {
        return err
    }
    io.Copy(os.Stderr, res.Body) // Replace this with Status.Code check
    return err
}

위 내용은 Go\의 `mime/multipart` 및 `net/http` 패키지를 사용하여 파일과 함께 다중 부분 양식을 보내는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.