Skip to content

Instantly share code, notes, and snippets.

@jaedsadadotme
Last active May 27, 2020 16:39
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jaedsadadotme/a3e6efdeeae51893a2ccc51fa9515971 to your computer and use it in GitHub Desktop.
Save jaedsadadotme/a3e6efdeeae51893a2ccc51fa9515971 to your computer and use it in GitHub Desktop.
simple upload file to s3 ด้วย golang
package main
import (
"bytes"
"encoding/json"
"fmt"
"io"
"log"
"net/http"
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/credentials"
"github.com/aws/aws-sdk-go/aws/session"
"github.com/aws/aws-sdk-go/service/s3"
"github.com/aws/aws-sdk-go/service/s3/s3manager"
"github.com/gorilla/mux"
)
const (
AWS_S3_REGION = "<REGION>"
AWS_S3_BUCKET = "<BUCKET>"
)
var sess = connectAWS()
func connectAWS() *session.Session {
sess, err := session.NewSession(&aws.Config{
Region: aws.String(AWS_S3_REGION),
Credentials: credentials.NewStaticCredentials(<AWSAccessKeyId>, <AWSSecretKey>, ""),
})
if err != nil {
panic(err)
}
return sess
}
// simple
func uploadFile(w http.ResponseWriter, r *http.Request) {
fmt.Printf("====Upload File ===")
file, header, err := r.FormFile("file")
if err != nil {
fmt.Println("Error ", err)
return
}
defer file.Close()
filename := header.Filename
uploader := s3manager.NewUploader(sess)
_, err = uploader.Upload(&s3manager.UploadInput{
Bucket: aws.String(AWS_S3_BUCKET), // Bucket
Key: aws.String(filename), // Name of the file to be saved
Body: file, // File
})
if err != nil {
log.Println("Something went wrong uploading the file", err)
return
}
data := map[string]string{
"msg": "Successfully uploaded to " + AWS_S3_BUCKET,
}
json.NewEncoder(w).Encode(&data)
}
func getFile(w http.ResponseWriter, r *http.Request) {
vars := mux.Vars(r)
filename := vars["file"]
results, err := s3.New(sess).GetObject(&s3.GetObjectInput{
Bucket: aws.String(AWS_S3_BUCKET),
Key: aws.String(filename),
})
if err != nil {
log.Println("", err)
return
}
defer results.Body.Close()
buf := bytes.NewBuffer(nil)
if _, err := io.Copy(buf, results.Body); err != nil {
log.Println("", err)
return
}
w.Header().Set("Content-type", "image/png")
w.Write(buf.Bytes())
return
}
func hello(w http.ResponseWriter, r *http.Request) {
data := map[string]string{
"msg": "Hello Golang",
}
json.NewEncoder(w).Encode(&data)
}
func setupRoutes() {
r := mux.NewRouter()
r.HandleFunc("/", hello).Methods(http.MethodGet)
r.HandleFunc("/getfile/{file}", getFile).Methods(http.MethodGet)
r.HandleFunc("/upload/", uploadFile).Methods(http.MethodPost)
log.Println("listen port :1234")
http.ListenAndServe(":1234", r)
}
func main() {
setupRoutes()
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment