2016-06-10 63 views
2

我也跟着在AWS網站gzip壓縮文件並將它們分流到S3的例子,這裏找到:http://docs.aws.amazon.com/sdk-for-go/latest/v1/developerguide/common-examples.title.html流通過AWS SDK GO gzip壓縮文件,以S3

我有一個問題,唯一的事情降落在我的S3的bucket基本上只有GZIP頭文件。每個文件的大小爲23b。

任何想法會導致這種情況?

我的代碼:

func (t *Table) Upload() { 
    year := time.Now().Format("2006") 
    month := time.Now().Format("01") 
    day := time.Now().Format("02") 
    reader, writer := io.Pipe() 
    go func() { 
    gw := gzip.NewWriter(writer) 
    io.Copy(gw, t.File) 
    t.File.Close() 
    gw.Close() 
    writer.Close() 
    }() 
    uploader := s3manager.NewUploader(session.New(&aws.Config{Region: aws.String(os.Getenv("AWS_REGION"))})) 
    result, err := uploader.Upload(&s3manager.UploadInput{ 
    Body: reader, 
    Bucket: aws.String(os.Getenv("S3_BUCKET")), 
    Key: aws.String(fmt.Sprintf("%s/%s/%s/%s/%s", os.Getenv("S3_KEY"), year, month, day, t.Name+".csv.gz")), 
    }) 
    if err != nil { 
    log.WithField("error", err).Fatal("Failed to upload file.") 
    } 
    log.WithField("location", result.Location).Info("Successfully uploaded to") 
} 
+0

什麼是t.File,是否打開? io.Copy複製直到EOF或錯誤。您應該檢查io.Copy的寫入字節和錯誤的返回值。 – jrwren

+0

t(或表)是一個結構,有一個開放的指針文件 –

+0

我沒有更新io.Copy爲: _,錯誤:= io.Copy(gw,t.File) 只是爲了檢查錯誤,沒有。 –

回答

1

我發現,即使你有如此設計的(像我一樣)一個結構:使用需要一個指向結構的功能

type Table struct {                                                                           
    Name  string                                                                            
    Path  string                                                                            
    FileName string                                                                            
    File  *os.File                                                                           
    Buffer *bufio.Writer                                                                          
    Data  chan string                                                                           
} 

不一定會使Table.File處於打開狀態。

我確認該文件在寫入完成後關閉,並在我的上傳功能中重新打開。這解決了問題並將完整的gzip文件上傳到S3。

感謝您對可能出現的問題提出意見@jrwren