作者:ninneman
项目:ninneman.or
func Delete(k int64, r *http.Request) (err error) {
c := appengine.NewContext(r)
key := datastore.NewKey(c, "Photo", "", k, nil)
// Get the database record
var p Photo
err = datastore.Get(c, key, &p)
if err != nil {
return
}
// Now we need to clean up the blobstore
// First we'll drop out the full resolution image
// then the thumbnail
err = blobstore.Delete(c, appengine.BlobKey(p.Blob))
if len(p.Thumb) != 0 {
err = blobstore.Delete(c, appengine.BlobKey(p.Thumb))
}
log.Println(err)
if err != nil {
return
}
// Delete from the database
err = datastore.Delete(c, key)
if err != nil {
return
}
return
}
作者:steliom
项目:jQuery-File-Uploa
func get(w http.ResponseWriter, r *http.Request) {
if r.URL.Path == "/" {
http.Redirect(w, r, WEBSITE, http.StatusFound)
return
}
parts := strings.Split(r.URL.Path, "/")
if len(parts) == 3 {
if key := parts[1]; key != "" {
blobKey := appengine.BlobKey(key)
bi, err := blobstore.Stat(appengine.NewContext(r), blobKey)
if err == nil {
w.Header().Add(
"Cache-Control",
fmt.Sprintf("public,max-age=%d", EXPIRATION_TIME),
)
if imageTypes.MatchString(bi.ContentType) {
w.Header().Add("X-Content-Type-Options", "nosniff")
} else {
w.Header().Add("Content-Type", "application/octet-stream")
w.Header().Add(
"Content-Disposition:",
fmt.Sprintf("attachment; filename=%s;", parts[2]),
)
}
blobstore.Send(w, appengine.BlobKey(key))
return
}
}
}
http.Error(w, "404 Not Found", http.StatusNotFound)
}
作者:rfistma
项目:camlistor
func (sto *appengineStorage) Fetch(br blob.Ref) (file io.ReadCloser, size uint32, err error) {
loan := ctxPool.Get()
ctx := loan
defer func() {
if loan != nil {
loan.Return()
}
}()
row, err := fetchEnt(ctx, br)
if err == datastore.ErrNoSuchEntity {
err = os.ErrNotExist
return
}
if err != nil {
return
}
if !row.inNamespace(sto.namespace) {
err = os.ErrNotExist
return
}
closeLoan := loan
var c io.Closer = &onceCloser{fn: func() { closeLoan.Return() }}
loan = nil // take it, so it's not defer-closed
reader := blobstore.NewReader(ctx, appengine.BlobKey(string(row.BlobKey)))
type readCloser struct {
io.Reader
io.Closer
}
return readCloser{reader, c}, uint32(row.Size), nil
}
作者:verticalpalett
项目:danduboi
func (p paintings) convert(w http.ResponseWriter, c appengine.Context, cs categories, ms media) {
for _, o := range p {
old := o.Fields
p := &painting.Painting{
Object: object.New(
painting.Kind,
strconv.Itoa(old.Number),
),
Title: old.Title,
Image: painting.Image{
BlobKey: appengine.BlobKey(" "),
},
Description: old.Description,
Year: old.Year,
Categories: cs.convert(old.Categories),
Media: ms.convert(old.Medium),
Price: old.Price,
Width: old.Width,
Height: old.Height,
ForSale: old.Status == "F",
}
if old.Image != "" {
p.Image.URL = baseURL + old.Image
}
saveLater.Call(c, p)
}
}
作者:hama
项目:av
// Get a file that is part of a visualization
func getVisualizationFile(w http.ResponseWriter, r *http.Request) {
c := appengine.NewContext(r)
vars := mux.Vars(r)
// Get visualization object
key, err := datastore.DecodeKey(vars["key"])
if err != nil {
common.Serve404(w)
return
}
var e model.Visualization
err = datastore.Get(c, key, &e)
if err != nil {
if err == datastore.ErrNoSuchEntity {
common.Serve404(w)
return
}
common.ServeError(c, w, err)
return
}
// Find blob key
filename := vars["filename"]
for i := range e.Files {
if e.Files[i].Filename == filename {
blobstore.Send(w, appengine.BlobKey(e.Files[i].BlobKey))
return
}
}
common.Serve404(w)
}
作者:kwilliams8
项目:nomada
func cleanImage(w http.ResponseWriter, r *http.Request) {
// Con esta manejador borramos las imagenes que no están asociadas a
// ningún punto y han quedado huerfanas
c := appengine.NewContext(r)
var blobs []blobstore.BlobInfo
q := datastore.NewQuery("__BlobInfo__")
keys, _ := q.GetAll(c, &blobs)
for _, key := range keys {
var imgk = appengine.BlobKey(key.StringID())
// Busco algun punto con esa key como imagen
var points []points.Point
qp := datastore.NewQuery("points").Filter("ImageKey = ", imgk)
qp.GetAll(c, &points)
if len(points) == 0 {
// borro la imagen
c.Infof("borro imagen %s", imgk)
err := blobstore.Delete(c, imgk)
if err != nil {
app.ServeError(c, w, err)
return
}
}
}
}
作者:odeke-e
项目:appengine-g
// propValue returns a Go value that combines the raw PropertyValue with a
// meaning. For example, an Int64Value with GD_WHEN becomes a time.Time.
func propValue(v *pb.PropertyValue, m pb.Property_Meaning) (interface{}, error) {
switch {
case v.Int64Value != nil:
if m == pb.Property_GD_WHEN {
return fromUnixMicro(*v.Int64Value), nil
} else {
return *v.Int64Value, nil
}
case v.BooleanValue != nil:
return *v.BooleanValue, nil
case v.StringValue != nil:
if m == pb.Property_BLOB {
return []byte(*v.StringValue), nil
} else if m == pb.Property_BLOBKEY {
return appengine.BlobKey(*v.StringValue), nil
} else if m == pb.Property_BYTESTRING {
return ByteString(*v.StringValue), nil
} else {
return *v.StringValue, nil
}
case v.DoubleValue != nil:
return *v.DoubleValue, nil
case v.Referencevalue != nil:
key, err := referenceValueToKey(v.Referencevalue)
if err != nil {
return nil, err
}
return key, nil
case v.Pointvalue != nil:
// NOTE: Strangely, latitude maps to X, longitude to Y.
return appengine.GeoPoint{Lat: v.Pointvalue.GetX(), Lng: v.Pointvalue.GetY()}, nil
}
return nil, nil
}
作者:ZionSof
项目:Bible-Serve
func downloadTranslationHandler(w http.ResponseWriter, r *http.Request) {
if r.Method != "GET" {
panic(&core.Error{http.StatusMethodNotAllowed, ""})
}
// parses query parameters
params, err := url.ParseQuery(r.URL.RawQuery)
if err != nil {
panic(&core.Error{http.StatusBadRequest, ""})
}
// TODO supports other query params
blobKey := params.Get("blobKey")
translations, err := loadTranslations(appengine.NewContext(r), false)
if err != nil {
panic(&core.Error{http.StatusInternalServerError, err.Error()})
}
for _, t := range translations {
if (string)(t.BlobKey) == blobKey {
blobstore.Send(w, appengine.BlobKey(blobKey))
return
}
}
panic(&core.Error{http.StatusNotFound, ""})
}
作者:ashokgela
项目:gorill
// Key returns the created blob key. It must be called after Close.
// An error is returned if Close wasn't called or returned an error.
func (w *Writer) Key() (appengine.BlobKey, error) {
if !w.closed {
return "", errorf("cannot call Key before Close")
}
if w.blobKey != "" {
return w.blobKey, w.closeErr
}
handle := w.filename[len(blobstoreFileDirectory):]
if !strings.HasPrefix(handle, creationHandlePrefix) {
w.blobKey = appengine.BlobKey(handle)
return w.blobKey, w.closeErr
}
k, err := w.keyNewWay(handle)
if err == nil {
w.blobKey = k
return k, nil
}
k, err = w.keyOldWay(handle)
if err == nil {
w.blobKey = k
}
return k, err
}
作者:pkdevbox
项目:appscal
// propValue returns a Go value that combines the raw PropertyValue with a
// meaning. For example, an Int64Value with GD_WHEN becomes a time.Time.
func propValue(v *pb.PropertyValue, m pb.Property_Meaning) (interface{}, error) {
switch {
case v.Int64Value != nil:
if m == pb.Property_GD_WHEN {
return fromUnixMicro(*v.Int64Value), nil
} else {
return *v.Int64Value, nil
}
case v.BooleanValue != nil:
return *v.BooleanValue, nil
case v.StringValue != nil:
if m == pb.Property_BLOB {
return []byte(*v.StringValue), nil
} else if m == pb.Property_BLOBKEY {
return appengine.BlobKey(*v.StringValue), nil
} else {
return *v.StringValue, nil
}
case v.DoubleValue != nil:
return *v.DoubleValue, nil
case v.Referencevalue != nil:
key, err := referenceValueToKey(v.Referencevalue)
if err != nil {
return nil, err
}
return key, nil
}
return nil, nil
}
作者:jake-che
项目:signi
func delete(w http.ResponseWriter, r *http.Request) {
c := appengine.NewContext(r)
var dTile Tile
// var now Period
// datastore.Get(c, currentSemesterKey(c), &now)
num, e := strconv.Atoi(r.FormValue("num"))
sem, e1 := strconv.Atoi(r.FormValue("semester"))
yr, e2 := strconv.Atoi(r.FormValue("year"))
if e != nil || e1 != nil || e2 != nil {
panic("shouldn't happen; semester and year guaranteed to be ints")
}
k := datastore.NewKey(c, "Tile", strint(r.FormValue("name"), num), 0, tileRootKey(c, sem, yr))
datastore.Get(c, k, &dTile)
if u := user.Current(c); !u.Admin {
http.Redirect(w, r, "/", http.StatusFound)
return
} else {
log.Println("deleting things now...")
e1 := blobstore.Delete(c, appengine.BlobKey(dTile.Imgref))
e2 := datastore.Delete(c, k)
if e1 != nil {
log.Println("error with blobstore delete")
}
if e2 != nil {
log.Println("error with datastore delete")
}
}
log.Println("redirecting")
http.Redirect(w, r, "/", http.StatusFound)
}
作者:ninneman
项目:dynamicfa
func Delete(rw http.ResponseWriter, req *http.Request, r render.Render, params martini.Params) {
ctx := appengine.NewContext(req)
b := banner.Banner{}
intID, err := strconv.Atoi(params["id"])
if err == nil {
b.ID = int64(intID)
}
if err := b.Get(ctx); err != nil {
http.Error(rw, "failed to delete banner", http.StatusInternalServerError)
return
}
segs := strings.Split(b.Image, "/")
blobstore.Delete(ctx, appengine.BlobKey(segs[len(segs)-1]))
if err := b.Delete(ctx); err != nil {
http.Error(rw, "failed to delete banner", http.StatusInternalServerError)
return
}
r.Status(200)
return
}
作者:jordan8
项目:foodbo
func (fileStore *blobstoreFileStore) RemoveFiles(fileKeys []string) {
keys := make([]appengine.BlobKey, len(fileKeys))
for i := 0; i < len(fileKeys); i++ {
keys[i] = appengine.BlobKey(fileKeys[i])
}
blobstore.DeleteMulti(fileStore.context, keys)
}
作者:nicneo92
项目:appscal
// loadMapEntry converts a Property into an entry of an existing Map,
// or into an element of a slice-valued Map entry.
func loadMapEntry(m Map, k *Key, p *pb.Property) os.Error {
var (
result interface{}
sliceType reflect.Type
)
switch {
case p.Value.Int64Value != nil:
if p.Meaning != nil && *p.Meaning == pb.Property_GD_WHEN {
result = Time(*p.Value.Int64Value)
sliceType = reflect.TypeOf([]Time(nil))
} else {
result = *p.Value.Int64Value
sliceType = reflect.TypeOf([]int64(nil))
}
case p.Value.BooleanValue != nil:
result = *p.Value.BooleanValue
sliceType = reflect.TypeOf([]bool(nil))
case p.Value.StringValue != nil:
if p.Meaning != nil && *p.Meaning == pb.Property_BLOB {
result = []byte(*p.Value.StringValue)
sliceType = reflect.TypeOf([][]byte(nil))
} else if p.Meaning != nil && *p.Meaning == pb.Property_BLOBKEY {
result = appengine.BlobKey(*p.Value.StringValue)
sliceType = reflect.TypeOf([]appengine.BlobKey(nil))
} else {
result = *p.Value.StringValue
sliceType = reflect.TypeOf([]string(nil))
}
case p.Value.DoubleValue != nil:
result = *p.Value.DoubleValue
sliceType = reflect.TypeOf([]float64(nil))
case p.Value.Referencevalue != nil:
key, err := referenceValueToKey(p.Value.Referencevalue)
if err != nil {
return err
}
result = key
sliceType = reflect.TypeOf([]*Key(nil))
default:
return nil
}
name := proto.GetString(p.Name)
if proto.GetBool(p.Multiple) {
var s reflect.Value
if x := m[name]; x != nil {
s = reflect.ValueOf(x)
} else {
s = reflect.MakeSlice(sliceType, 0, 0)
}
s = reflect.Append(s, reflect.ValueOf(result))
m[name] = s.Interface()
} else {
m[name] = result
}
return nil
}
作者:AppScal
项目:appscal
// BlobKeyForFile returns a BlobKey for a Google Storage file.
// The filename should be of the form "/gs/bucket_name/object_name".
func BlobKeyForFile(c appengine.Context, filename string) (appengine.BlobKey, error) {
req := &blobpb.CreateEncodedGoogleStorageKeyRequest{
Filename: &filename,
}
res := &blobpb.CreateEncodedGoogleStorageKeyResponse{}
if err := c.Call("blobstore", "CreateEncodedGoogleStorageKey", req, res, nil); err != nil {
return "", err
}
return appengine.BlobKey(*res.BlobKey), nil
}
作者:mithilpatel0
项目:caci
func delete(w http.ResponseWriter, r *http.Request) {
parts := strings.Split(r.URL.Path, "/")
if len(parts) != 3 {
return
}
if key := parts[1]; key != "" {
c := appengine.NewContext(r)
blobstore.Delete(c, appengine.BlobKey(key))
memcache.Delete(c, key)
}
}
作者:yschu
项目:go_tes
func protoToProperties(dst chan<- Property, errc chan<- error, src *pb.EntityProto) {
defer close(dst)
props, rawProps := src.Property, src.RawProperty
for {
var (
x *pb.Property
noIndex bool
)
if len(props) > 0 {
x, props = props[0], props[1:]
} else if len(rawProps) > 0 {
x, rawProps = rawProps[0], rawProps[1:]
noIndex = true
} else {
break
}
var value interface{}
switch {
case x.Value.Int64Value != nil:
if x.Meaning != nil && *x.Meaning == pb.Property_GD_WHEN {
value = fromUnixMicro(*x.Value.Int64Value)
} else {
value = *x.Value.Int64Value
}
case x.Value.BooleanValue != nil:
value = *x.Value.BooleanValue
case x.Value.StringValue != nil:
if x.Meaning != nil && *x.Meaning == pb.Property_BLOB {
value = []byte(*x.Value.StringValue)
} else if x.Meaning != nil && *x.Meaning == pb.Property_BLOBKEY {
value = appengine.BlobKey(*x.Value.StringValue)
} else {
value = *x.Value.StringValue
}
case x.Value.DoubleValue != nil:
value = *x.Value.DoubleValue
case x.Value.Referencevalue != nil:
key, err := referenceValueToKey(x.Value.Referencevalue)
if err != nil {
errc <- err
return
}
value = key
}
dst <- Property{
Name: x.GetName(),
Value: value,
NoIndex: noIndex,
Multiple: x.GetMultiple(),
}
}
errc <- nil
}
作者:ninneman
项目:ninneman.or
func (photo Photo) Store(r *http.Request) (err error) {
c := appengine.NewContext(r)
photo.Added = time.Now()
_, err = datastore.Put(c, datastore.NewIncompleteKey(c, "Photo", nil), &photo)
if err != nil {
_ = blobstore.Delete(c, appengine.BlobKey(photo.Blob))
}
return
}
作者:kloka
项目:gombtile
func blob(w http.ResponseWriter, r *http.Request) {
c := appengine.NewContext(r)
w.Header().Set("Content-Type", "image/png")
f := blobstore.NewReader(c, appengine.BlobKey("AMIfv97HhOdzO1aYQEe0QBrzbWSjSgWr2-JUxFJh_KnwxAhEdAqqK76TeE7vm5eDJW0ZoMwFVwur0Ub3t1kD_KzP3yJi4LIG6A-dCdJrJYafoJgH7SITCBum4MF9CY-C7na5fBulmKwQXd2mEYMyfk_RDgeQN1SZug"))
buf := make([]byte, 1024*1024)
n, err := f.Read(buf)
if err != nil {
panic(err)
}
w.Write(buf[:n])
}
作者:clicker36
项目:ebfmex-pu
func handleServeImg(w http.ResponseWriter, r *http.Request) {
if r.FormValue("id") != "none" {
c := appengine.NewContext(r)
var imgprops image.ServingURLOptions
imgprops.Secure = true
imgprops.Size = 400
imgprops.Crop = false
url, _ := image.ServingURL(c, appengine.BlobKey(r.FormValue("id")), &imgprops)
http.Redirect(w, r, url.String(), http.StatusFound)
}
return
}