func (h *backupHandler) upload(backups backups.Backups, resp http.ResponseWriter, req *http.Request) (string, error) { // Since we want to stream the archive in we cannot simply use // mime/multipart directly. defer req.Body.Close() var metaResult params.BackupsMetadataResult archive, err := httpattachment.Get(req, &metaResult) if err != nil { return "", err } if err := validateBackupMetadataResult(metaResult); err != nil { return "", err } meta := apiserverbackups.MetadataFromResult(metaResult) id, err := backups.Add(archive, meta) if err != nil { return "", err } if err := sendStatusAndJSON(resp, http.StatusOK, ¶ms.BackupsUploadResult{ID: id}); err != nil { return "", errors.Trace(err) } return id, nil }
func (h *backupHandler) download(backups backups.Backups, resp http.ResponseWriter, req *http.Request) (string, error) { args, err := h.parseGETArgs(req) if err != nil { return "", err } logger.Infof("backups download request for %q", args.ID) meta, archive, err := backups.Get(args.ID) if err != nil { return "", err } defer archive.Close() err = h.sendFile(archive, meta.Checksum(), resp) return args.ID, err }