まずHTMLとroutingを作ります。
<button type=“button” onclick="location.href='/test/download'">download</button>
GET /test App.Test GET /test/download App.Download
続いてaws-sdk-goをget
$ go get -u github.com/aws/aws-sdk-go
最後にcontroller
app.go
L ファイルのリターンはc.RenderFileName(“${file_path}”, revel.Attachment)
import (
"github.com/revel/revel"
"os"
"log"
"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"
)
func (c App) Download() revel.Result {
creds := credentials.NewStaticCredentials("${AWS_ACCESS_KEY_ID}","${AWS_SECRET_ACCESS_KEY}","")
sess := session.Must(session.NewSession(&aws.Config{
Credentials: creds,
Region: aws.String("ap-northeast-1"),
}))
f, err := os.Create("public/tmp/sample.json")
if err != nil {
log.Fatal(err)
}
bucketName := "${bucketName}"
objectKey := "${file}"
downloader := s3manager.NewDownloader(sess)
n, err := downloader.Download(f, &s3.GetObjectInput{
Bucket: aws.String(bucketName),
Key: aws.String(objectKey),
})
if err != nil {
log.Fatal(err)
}
log.Printf("DownloadedSize: %d byte", n)
return c.RenderFileName("public/tmp/sample.json", revel.Attachment)
}
動作テスト

OKOK, これで議事録機能はできたかな
ファイルパスのところを、/public/tmp/sample.json って書いてハマってしまったorz
さあ続いてKVS