标签: blobstore

从Android客户端将图像存储到Blobstore并检索blobkey并上传URL以存储在Datastore中. - GAE

在我的Android应用程序中,我想将图像上传到Blobstore,然后检索上传URL和图像的Blobkey,这样我就可以将Blobkey存储在DataStore中.

我试过这段代码,但我的图片没有上传:

Servlet(返回上传网址)

BlobstoreService blobstoreService = BlobstoreServiceFactory
            .getBlobstoreService();
public void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws IOException {

        UploadOptions uploadOptions = UploadOptions.Builder
                .withGoogleStorageBucketName("photobucket11")
                .maxUploadSizeBytes(1048576);
        String blobUploadUrl = blobstoreService.createUploadUrl("/upload",
                uploadOptions);

        // String blobUploadUrl = blobstoreService.createUploadUrl("/uploaded");

        resp.setStatus(HttpServletResponse.SC_OK);
        resp.setContentType("text/plain");

        PrintWriter out = resp.getWriter();
        out.print(blobUploadUrl);

    }

    public void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws IOException {
        doGet(req, resp);
    }
Run Code Online (Sandbox Code Playgroud)

代码:Android客户端

Bitmap bmp = BitmapFactory.decodeFile(imagePath);
                ByteArrayOutputStream out = new ByteArrayOutputStream();
                bmp.compress(CompressFormat.JPEG, 75, out);
                byte[] imgByte = out.toByteArray();
                String encodedImage = Base64.encodeToString(imgByte,
                        Base64.DEFAULT);

                HttpClient httpClient = new DefaultHttpClient(); …
Run Code Online (Sandbox Code Playgroud)

google-app-engine android blobstore google-cloud-datastore

11
推荐指数
2
解决办法
4703
查看次数

使用Google App Engine Blobstore下载文件名

我正在使用Google App Engine Blobstore来存储一系列文件类型(PDF,XLS等),并且我正在尝试找到一种机制,通过该机制可以使用上传文件的原始文件名(存储在blob_info中)来命名下载的文件,即用户在保存对话框中看到'some_file.pdf'而不是'very_long_db_key.pdf'.

我在文档中看不到任何允许这样的内容:

http://code.google.com/appengine/docs/python/blobstore/overview.html

我在其他帖子中看到了一些提示,你可以使用blob_info中的信息来设置content-disposition头.这是实现理想目标的最佳方法吗?

python google-app-engine blobstore

10
推荐指数
1
解决办法
3009
查看次数

在Datastore vs Blobstore中存储文件的成本

问题: 由于blobstore中的每个文件在数据存储区中都有一个关联的BlobInfo实体,我是否像其他任何数据存储区实体一样收取该实体的写入/读取成本?

背景:

我们在App Engine上存储了数百万个图像,我们目前将它们存储在数据存储区实体中(图像小于1MB).我想知道使用blobstore是否会降低我们的成本.我并不担心存储成本.真正的成本是写作和阅读的行为,所以这就是我想要减少的.现在我们支付数据存储实体的写入和读取费用,每个图像一个实体.

另一方面,使用blobstore,写入/读取(实例小时数除外)似乎没有单独的成本,但每个blob在数据存储区中都有一个特殊的BlobInfo实体,可以查询blob.从文档中可以清楚地看出,这些实体在成本方面是否被视为任何其他数据存储区实体(每个实体写入2个Ops,每个索引属性写入2个写入操作)?

google-app-engine blobstore google-cloud-datastore

10
推荐指数
1
解决办法
1319
查看次数

Blobstore上传重定向到错误的模块

问题

使用Go Blobstore API上载文件时,成功路径会重定向到错误的appengine模块.这是对问题的更直观的描述:

  1. 用户登陆模块A的上传页面:http://A.my-appengine-app.com/upload
  2. 用户的浏览器向模块发出上传会话请求: http://A.my-appengine-app.com/upload/session
  3. 模块A定义了一个/upload/session运行以下Go代码的处理程序:url, err := blobstore.UploadURL(c, "/upload/success")
  4. 该方法返回一个URL,类似于: http://A.my-appengine-app.com/_ah/upload/[some long hash]/
  5. 此URL被中继回用户的浏览器并插入到actiona中<form>.
  6. 用户POST向URL 提交多部分请求
  7. 无论处理URL(一些非用户空间appengine处理程序),尝试重定向回 /upload/success

这是事情变得奇怪的地方.在开发中,服务器重定向到模块A中的 "/ upload/success" .在生产中,服务器重定向到主模块,我们可以称之为现在.我可以告诉这种情况正在发生,因为我404在我的Web控制台中获得了一个日志表明正在向模块B发出请求.我甚至已经明确地将主机名作为成功路径的一部分传递(步骤#3),但是没有效果.

当前解决方案(不理想)

似乎我唯一的办法是在模块B中定义一个处理程序来处理请求,就像模块A那样.由于goapp架构将所有模块组合在一起,这不是世界上最差的权衡,但鉴于模块应该是垂直独立的,它在语义上是错误的.如果有人知道如何解决这个问题,我将不得不承担责任.现在,我将采取上述方法.

google-app-engine go blobstore app-engine-modules gae-module

10
推荐指数
0
解决办法
491
查看次数

如何在BlobStore中设置filename属性?

我是以编程方式上传图像文件并想设置文件名.当我通过POST上传文件时,会自动设置filename属性.但是,使用下面的方法时,文件名未设置.

        image = urllib2.urlopen(url)
        file_name = files.blobstore.create(mime_type='image/png')
        with files.open(file_name, 'a') as f:
            f.write(image.read())
        files.finalize(file_name)  
        image_blob_key = files.blobstore.get_blob_key(file_name) 
Run Code Online (Sandbox Code Playgroud)

python google-app-engine blobstore

9
推荐指数
1
解决办法
2796
查看次数

Blobstore图像在Google App Engine开发服务器上消失

我在我的网站上使用App Engine的高性能图像服务,并且我能够在我的本地机器和生产中正常工作,即我可以上传图像并使用blob键上的get_serving_url成功显示图像.但是,这些图像似乎不会在我的开发服务器上持续存在,即在我从计算机重新启动后返回时,图像不再显示.开发服务器吐出:

images_service_pb.ImagesServiceError.BAD_IMAGE_DATA

我猜它实际上是因为潜在的斑点不再存在(虽然这只是一种预感).我的数据存储的其余部分仍然完好无损,因为我正在使用启动设置"--datastore_path"来确保我的数据仍然存在.是否有一个单独的标志我需要用来持久保存blob?或者这里有一个我错过的单独问题?

google-app-engine image blobstore

9
推荐指数
1
解决办法
1333
查看次数

GAE Blobstore:ImagesService.getServingUrl()为我提供了更小的图像

我正在将一些图像上传到GAE的Blobstore.上传成功,当我在GAE控制台中看到图像时,我可以看到它们以预期的大小和分辨率存储.

根据这个网站,要获得上传图像的URL,我可以使用:

BlobKey blobKey = (BlobKey) blobs.get("image");
ImagesService imagesService = ImagesServiceFactory.getImagesService();
String imageUrl = imagesService.getServingUrl(blobKey);
Run Code Online (Sandbox Code Playgroud)

生成的URL指向较小版本的上载图像(大小和质量).如何获取存储在Blobstore中的完整大小图像的URL?

google-app-engine blobstore

9
推荐指数
1
解决办法
1814
查看次数

如何在Google App Engine(Python)中处理删除

我是一名新手程序员,也是Google App Engine和webapp2等的新手.所以这可能是一个非常基本的问题.

我正在创建一个将图像存储到BlobStore的应用程序.我的模型存储描述,blob_key,图像URL和日期.

我能够保存所有东西,所以这一点都没关系.

但是现在我想创建一个删除按钮,它不仅会删除数据存储区中的项目,还会删除保存在blobstore中的图像.

我创建了一个DeleteHandler,并在html中有一个表单,传递我想要删除的项的键.在DeleteHandler中,我使用发布的密钥从数据存储中删除项目.我也在尝试使用密钥来删除保存在blobstore中的图像.

到目前为止,我在删除表单帖子上得到了404,即使我已经过去了,我也不确定我的DeleteHandler是否正确处理我正在寻找的功能.

任何帮助将非常感激..

Main.py:

import os
import urllib
import webapp2
from google.appengine.ext.webapp import template
from google.appengine.ext import blobstore
from google.appengine.ext.webapp import blobstore_handlers
from google.appengine.api import images
#Models
from google.appengine.ext import db

class ImageItem(db.Model):
    description = db.StringProperty(required=True)
    img_url = db.StringProperty()
    blob_key = blobstore.BlobReferenceProperty()
    when = db.DateTimeProperty(auto_now_add=True)


#Handlers (Views)
class MainHandler(webapp2.RequestHandler):
  def get(self):
    upload_url = blobstore.create_upload_url('/upload')
    imgs = db.GqlQuery(
        'SELECT * FROM ImageItem '
        'ORDER BY when DESC')
    imgs_dict = {'imgs': imgs}
    self.response.out.write( template.render( 'main.html',locals() ) …
Run Code Online (Sandbox Code Playgroud)

python google-app-engine blobstore webapp2

9
推荐指数
1
解决办法
2388
查看次数

Google AppEngine Blobstore:如何确保浏览器显示进度和下载的总大小?

当我从blobstore提供下载时,我注意到浏览器没有显示剩余的总大小和时间,下载一直持续到完成,但浏览器似乎不知道预期的总大小.

注意:

  • 这只发生在appspot.com的生产服务器中.在开发环境(localhost)中,事情按预期工作,浏览器显示总大小,完成百分比和剩余的大约时间......

  • 我试图将标题'Content-Length'设置为blob大小,没有运气.

  • 在分析下载的blob的标题时,Content-Length标头不存在(即使我在使用"send_blob"之前写了它).标题是这样的:

HTTP/1.0 200 OK =>
Cache-Control => no-cache
Content-Disposition => attachment; filename ="Setup.exe"
Expires => Fri,01 Jan 1990 00:00:00 GMT
Content-Type => application/octet-stream
Date => Thu,31 Mar 2011 20:19:52 GMT
Server => Google Frontend

任何人都知道如何让浏览器显示总大小,下载百分比和估计的剩余时间?

google-app-engine blobstore

8
推荐指数
1
解决办法
1098
查看次数

如何为com.google.appengine.api.blobstore.BlobInfo计算md5Hash

我们试图避免保存重复的文件.但是,我们的md5结果总是与BlobInfo不同.

我们如何计算它:

    MessageDigest messageDigest = java.security.MessageDigest.getInstance("MD5");
    digest = messageDigest.digest(bytes);
    String digestString = DigestUtils.md5Hex(digest);
Run Code Online (Sandbox Code Playgroud)

它不符合: (new BlobInfoFactory().loadBlobInfo(blobKey)).getMd5Hash();

示例不匹配:

google vs my own calculation:
8cdeb6db94bc4fd156e2975fd8ebbcf2 vs 9003b37afbf3637de96c35774069453f 
65a25dafcba58d16d58a9c7585cc3932 vs 52383159f7d27417d50121aaee2728b5 
5cccc2d690fdc0c254234d5526876b34 vs 8196da9b6733daa60e08d927693df483 
Run Code Online (Sandbox Code Playgroud)

它在生产服务器上.(我们没有测试开发环境)

google-app-engine md5 duplicate-removal message-digest blobstore

8
推荐指数
1
解决办法
833
查看次数