Can anyone help me rewrite this function. The methods in it have been deprecated, but I don't understand enough about Google's datastore to update this code. https://cloud.google.com/appengine/docs/deprecations/files_api
func uploadBlob(w http.ResponseWriter, r *http.Request) {
bodyData, error := ioutil.ReadAll(r.Body)
fileType := r.URL.Query()["type"][0]
var mimeType string
if fileType == "png" {
mimeType = "image/png"
} else {
mimeType = "application/pdf"
}
context := appengine.NewContext(r)
writer, error := blobstore.Create(context, mimeType)
if error != nil {
return
}
_, error = writer.Write(bodyData)
if error != nil {
return
}
error = writer.Close()
if error != nil {
return
}
var k appengine.BlobKey
k, _ = writer.Key()
encoder := json.NewEncoder(w)
encoder.Encode(&UploadBlobResponse{ Key: string(k) })
}
Thanks in advance. If you'd need more information let me know. The package is short so I can probably link all of it.
I'm using the storage api "google.golang.org/cloud/storage"
You need to create an oauth2 context
func NewCloudStorageContext(c context.Context) context.Context {
hc := &http.Client{
Transport: &oauth2.Transport{
Source: google.AppEngineTokenSource(c, storage.ScopeFullControl),
Base: &urlfetch.Transport{Context: c},
},
}
return cloud.NewContext(appengine.AppID(c), hc)}
Upload data
func Upload(c context.Context, req UploadRequest) (string, error) {
// get CloudStorage Authenticated Context
ctx := NewCloudStorageContext(c)
// generate file name
fileName := BackupFolder + req.Table + "/" + generateFileName(16)
// get default bucket
bucketName, err := getDefaultBucket(c)
if err != nil {
log.Errorf(c, "failed to get default GCS bucket name: %v", err)
return fileName, err
}
log.Debugf(c, "Creating file. bucket: %s, file name : %s", bucketName, fileName)
wc := storage.NewWriter(ctx, bucketName, fileName)
wc.ContentType = req.FileType
wc.ACL = []storage.ACLRule{{storage.AllUsers, storage.RoleReader}}
defer wc.Close()
//Write file
if _, err := wc.Write(req.Payload); err != nil {
log.Errorf(c, "createFile: unable to write data to bucket %s, error: %s", bucketName, err.Error)
return fileName, err
}
if err := wc.Close(); err != nil {
log.Errorf(c, "createFile: unable to close bucket %s, error : %s", bucketName, err.Error)
return fileName, err
}
return fileName, nil}