Something went wrong on our end
-
Danis Kirasirov authored0a120351
uploader.go 811 B
package files
import (
"errors"
"fmt"
"io"
"net/http"
"net/url"
)
type Uploader interface {
Upload(src io.Reader, upload *Upload) error
}
type uploader struct{}
func NewUploader() Uploader {
return &uploader{}
}
func (u *uploader) Upload(src io.Reader, upload *Upload) error {
req, err := http.NewRequest(http.MethodPut, upload.UploadURL, src)
if err != nil {
return err
}
req.ContentLength = int64(upload.Size)
req.Header.Set("Content-Disposition", fmt.Sprintf("attachment; filename*=UTF-8''%s;", url.PathEscape(upload.Name)))
req.Header.Set("Content-Type", upload.MimeType)
resp, err := http.DefaultClient.Do(req)
if err != nil {
return err
}
resp.Body.Close()
if resp.StatusCode != http.StatusOK {
return errors.New("upload request failed: " + resp.Status)
}
return nil
}