func TestS3WriteFiles(t *testing.T) { if *flagTestData == "" { t.Skipf("testdata dir not specified, skipping test.") } sto, err := newFromConfig(nil, jsonconfig.Obj{ "aws_access_key": *key, "aws_secret_access_key": *secret, "bucket": *bucket, }) if err != nil { t.Fatalf("newFromConfig error: %v", err) } dir, err := os.Open(*flagTestData) if err != nil { t.Fatal(err) } defer dir.Close() names, err := dir.Readdirnames(-1) for _, name := range names { f, err := os.Open(filepath.Join(*flagTestData, name)) if err != nil { t.Fatal(err) } defer f.Close() // assuming there aren't that many files. if _, err := schema.WriteFileFromReaderWithModTime(sto, name, time.Now(), f); err != nil { t.Fatalf("Error while writing %v to S3: %v", name, err) } t.Logf("Wrote %v successfully to S3", name) } }
func (ui *UIHandler) serveUploadHelper(rw http.ResponseWriter, req *http.Request) { if ui.root.Storage == nil { httputil.ServeJSONError(rw, httputil.ServerError("No BlobRoot configured")) return } mr, err := req.MultipartReader() if err != nil { httputil.ServeJSONError(rw, httputil.ServerError("reading body: "+err.Error())) return } var got []*uploadHelperGotItem var modTime types.Time3339 for { part, err := mr.NextPart() if err == io.EOF { break } if err != nil { httputil.ServeJSONError(rw, httputil.ServerError("reading body: "+err.Error())) break } if part.FormName() == "modtime" { payload, err := ioutil.ReadAll(part) if err != nil { log.Printf("ui uploadhelper: unable to read part for modtime: %v", err) continue } modTime = types.ParseTime3339OrZero(string(payload)) continue } fileName := part.FileName() if fileName == "" { continue } br, err := schema.WriteFileFromReaderWithModTime(ui.root.Storage, fileName, modTime.Time(), part) if err != nil { httputil.ServeJSONError(rw, httputil.ServerError("writing to blobserver: "+err.Error())) return } got = append(got, &uploadHelperGotItem{ FileName: part.FileName(), ModTime: modTime, FormName: part.FormName(), FileRef: br, }) } httputil.ReturnJSON(rw, &uploadHelperResponse{Got: got}) }