标签: blobstore

将多个文件上传到blobstore(redux)

是的,我已经看过这个问题了,但是我发现的信息与其接受的答案和尼克约翰逊关于GAE文档的博客相矛盾.

文档讨论了同时上传多个文件 - 获取上传文件的功能返回一个列表:

get_uploads()方法返回一个BlobInfo对象列表,一个用于请求中的每个上载文件.

但在我看过的每个地方,一直存在的假设是,每次只能上传一个文件,每次都需要创建一个新的上传网址.

是否可以使用Plupload使用HTML5/Flash同时上传多个文件?

upload google-app-engine file-upload blobstore plupload

7
推荐指数
1
解决办法
3548
查看次数

生成Zip文件并存储在GAE BlobStore中

我正在尝试生成一个zip文件并存储在App Engine的Blobstore中.现在,我没有从Blobstore获得有效的zip文件.不确定问题是压缩,存储,检索还是下载.

我已经根据以下问题的片段构建了代码.

在Blobstore中存储后,我让用户通过Flask应用程序下载它.

这是我想要做的事情的要点.

def zipit():
  zipstream = StringIO.StringIO()
  zfile = zipfile.ZipFile(file=zipstream, mode='w')
  bytes = "lorem ipsum dolor sit amet"
  zfile.writestr('loremipsum', bytes, compress_type=zipfile.ZIP_STORED)
  zfile.close()
  zipstream.seek(0)
  return zipstream.getvalue()


zip_file = files.blobstore.create(mime_type='application/zip')
zip_data = zipit()

with files.open(zip_file, 'a') as f:
  f.write(zip_data)
files.finalize(zip_file)
blob_key = files.blobstore.get_blob_key(zip_file)

blob_data = blobstore.BlobReader(blob_key).read()

# http://flask.pocoo.org/docs/api/
response = make_response(blob_data)
response.headers['Content-Type'] = 'application/zip'
response.headers['Content-Disposition'] = 'attachment; filename="loremipsum.zip"'
return response
Run Code Online (Sandbox Code Playgroud)

任何帮助深表感谢.

python zip google-app-engine blobstore flask

7
推荐指数
1
解决办法
2530
查看次数

如何将大型文件(> 5 mb)从Blobstore发布到Google云端硬盘?

我有blob存储在我的Blobstore中,并希望将这些文件推送到Google云端硬盘.当我使用Google App Engine UrlFetchService时

URLFetchService fetcher = URLFetchServiceFactory.getURLFetchService();
URL url = new URL("https://www.googleapis.com/upload/drive/v1/files");
HTTPRequest httpRequest = new HTTPRequest(url, HTTPMethod.POST);
httpRequest.addHeader(new HTTPHeader("Content-Type", contentType));
httpRequest.addHeader(new HTTPHeader("Authorization", "OAuth " + accessToken));
httpRequest.setPayload(buffer.array());
Future<HTTPResponse> future = fetcher.fetchAsync(httpRequest);
try {
  HTTPResponse response = (HTTPResponse) future.get();
} catch (Exception e) {
  log.warning(e.getMessage());
}
Run Code Online (Sandbox Code Playgroud)

问题:当文件超过5 MB时,它超出了UrlFetchService请求大小的限制(链接:https://developers.google.com/appengine/docs/java/urlfetch/overview#Quotas_and_Limits)

替代方案:使用Google Drive API我有以下代码:

File body = new File();
body.setTitle(title);
body.setDescription(description);
body.setMimeType(mimeType);

// File's content.
java.io.File fileContent = new java.io.File(filename);
FileContent mediaContent = new FileContent(mimeType, fileContent); …
Run Code Online (Sandbox Code Playgroud)

java google-app-engine blobstore google-drive-api

7
推荐指数
1
解决办法
1546
查看次数

ndb.BlobProperty vs BlobStore:更私密,更安全

我一直在阅读有关数据存储区与blobstore的stackoverflow,用于存储和检索图像文件.一切都指向blobstore,除了一个:隐私和安全.

在数据存储区中,我的用户的照片是私密的:我可以完全控制谁获得blob.但是,在blobstore中,任何知道该网址的人都可以想象访问我的用户照片吗?真的吗?

这是一个应该让我安心的报价,但它仍然不清楚.所以有blob键的人仍然可以访问这些照片吗?(来自Blobstore中的商店照片或数据存储中的Blob - 哪个更好/更有效/更便宜?)

从Blobstore中提供值的方式是接受对应用程序的请求,然后使用密钥响应X-AppEngine-BlobKey标头.App Engine拦截传出响应,并使用直接从服务流式传输的Blobstore值替换正文.由于应用程序逻辑首先设置标头,因此应用程序可以实现它想要的任何访问控制.没有应用程序干预,没有默认URL直接在Blobstore之外提供值.

所有这一切都要问:对于贩卖图片,哪个更私密,更安全,以及为什么:数据存储区或blobstore?或者,嘿,google-cloud-storage(我目前一无所知)

google-app-engine blobstore python-2.7 google-cloud-storage google-cloud-datastore

7
推荐指数
1
解决办法
2180
查看次数

为什么blobstore上传代码有重定向url

我想使用blobstore存储图像的过程以保存数据存储区中的blob键结束.所以在下面的代码中,应该在我的后端,为什么我需要一个重定向URL,因为我已经有了blob密钥?为什么我不只是将blob密钥保存在我的数据存储区中然后返回它?

public class Upload extends HttpServlet {
    private BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService();

    public void doPost(HttpServletRequest req, HttpServletResponse res)
        throws ServletException, IOException {

        Map<String, BlobKey> blobs = blobstoreService.getUploadedBlobs(req);
        BlobKey blobKey = blobs.get("myFile");

        if (blobKey == null) {
            res.sendRedirect("/");
        } else {
            res.sendRedirect("/serve?blob-key=" + blobKey.getKeyString());
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

此代码来自教程:https://developers.google.com/appengine/docs/java/blobstore/overview#Complete_Sample_App

google-app-engine android blobstore google-cloud-endpoints

7
推荐指数
1
解决办法
514
查看次数

Google App Engine Blobstore和Restlet - "必须从blob上传回调请求中调用"

错误

引起:java.lang.IllegalStateException:必须从blob上传回调请求中调用.在com.google.appengine.api.blobstore.BlobstoreServiceImpl.getUploads(BlobstoreServiceImpl.java:169)

public class UserUploadProfilePictureResource extends ServerResource {

    @Post
    public void handleBlobstoreUpload(Representation entity) {

        Representation rep =null;

        if (entity !=null) {

            if (MediaType.MULTIPART_FORM_DATA.equals(entity.getMediaType(), true)) {
                Request restletRequest = getRequest();
                HttpServletRequest servletRequest = ServletUtils.getRequest(restletRequest);

                BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService();

                Map<String, List<BlobKey>> blobs = blobstoreService.getUploads(servletRequest);
Run Code Online (Sandbox Code Playgroud)

可能的解决方案(但我不想要)

第一.我不想调用第二个HttpServlet.

第二.关于这篇文章,有手动编写文件的解决方案:

谷歌说:

不推荐使用:此处用于将文件写入Blobstore的文件API功能将在将来的某个时间删除,有利于将文件写入Google云端存储并使用Blobstore为其提供服务.

可能的解决方案2(但只是解决方法的概念)

http://www.cloudave.com/1055/the-new-google-app-engine-blobstore-api-first-thoughts/

Bret Slatkin指出,当API制作用于上传文件的POST URL时,它会创建一个唯一的一次性URL,以减轻任何可能的嗅探.

这非常适合用于呈现用户提交的Web表单的情况.但是,如果您尝试提供允许上传文件的REST API(例如,想想像TwitPic这样的东西)会让事情变得更难.在这种情况下,您将必须编写自己的渲染,模拟Web表单将执行的操作(获取文件,创建随机POST URL,调用它,...)

在Google应用引擎中存储图片的最佳方法是什么?有没有比blobstore更好的方法?如何在blobstore中存储图像?

java google-app-engine file-upload file blobstore

7
推荐指数
1
解决办法
2277
查看次数

直接将数据放入AppEngine的Blobstore中

AppEngine的标准API假设文件是​​从HTML表单上传的.我正在尝试从REST API方法将文件发布到blobstore,该方法可以由非Html客户端(Flash,iPhone等)调用

我正在努力工作的代码:

# Get the blobstore upload url    
upload_url = blobstore.create_upload_url("/activities/upload_finished");

# Make sync call to the blobstore url to post our image
result = urlfetch.fetch(url=upload_url,
                        payload=request.FILES,
                        method=urlfetch.POST,
                        headers={'Content-Type': 'multipart/form-data'})
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

ValueError:无效边界

任何的想法?
有没有人试过不通过网络表单发布到blobstore?

多部分形式:''

google-app-engine blobstore

6
推荐指数
2
解决办法
3974
查看次数

通过app-engine端点api提供blobstore映像

我正在构建一个app-engine端点api,它从用户(Android应用程序)获取图片并以编程方式将其保存到blobstore.然后我将blob_key保存在我的数据存储区中.代码如下:

  • 首先,我通过我接收到的图像@endpoint.methodmessages.BytesField:

    image_data = messages.BytesField(1,required = True)

然后我像这样保存到blobstore:

from google.appengine.api import files

def save_image(data):
  # Create the file
  file_name = files.blobstore.create(mime_type='image/png')

  # Open the file and write to it
  with files.open(file_name, 'a') as f:
    f.write('data')

  # Finalize the file. Do this before attempting to read it.
  files.finalize(file_name)

  # Get the file's blob key
  blob_key = files.blobstore.get_blob_key(file_name)
  return blob_key # which is then saved to datastore
Run Code Online (Sandbox Code Playgroud)

现在我想把图像送回来.我不知道如何将以下代码放入我的端点api:

from google.appengine.ext import blobstore
from google.appengine.ext.webapp import blobstore_handlers
class ServeHandler(blobstore_handlers.BlobstoreDownloadHandler): …
Run Code Online (Sandbox Code Playgroud)

google-app-engine android blobstore python-2.7 google-cloud-endpoints

6
推荐指数
0
解决办法
4098
查看次数

如何使用mapreduce批量更新满足查询的数据存储区实体?

我想使用mapreduce库来更新满足查询的所有实体.有几个并发症:

  1. 查找要更新的实体的查询检查特定属性"property1"的值是否包含在来自csv文件的长值列表(~10000个条目)中
  2. 对于满足查询的每个实体,需要将另一个属性"property2"更新为等于第二列中的值和csv文件的同一行

我知道如何将csv文件上传到Blobstore并使用Blobstore输入阅读器读取每一行.我也知道使用查询获取实体的数据存储区输入阅读器.

我的问题是如何创建一个Mapper类,从Blobstore读取输入数据,获取数据存储区实体并尽可能高效地更新它们?

java google-app-engine mapreduce blobstore google-cloud-datastore

6
推荐指数
1
解决办法
816
查看次数

GAE + JUnit:将blob添加到blobstore

我正在使用Google App Engine for Java,我正在尝试为处理blobstore的代码编写JUnit测试.如何在blobstore中放置blob以在测试期间使用(在配置为使用LocalBlobstoreServiceTestConfig将所有内容保存在内存中之后)?似乎解决方案应该非常简单和基本,但不知怎的,我找不到它.

我想可以使用Files API,但我已经避开了它,因为它已经停止(下周).

我知道测试之外将blob放入blobstore的唯一方法是通过多部分表单上传.但是,我不知道如何在JUnit测试的上下文中这样做.

也可以通过blobstore API与Google Cloud Storage对象进行交互,但我选择使用vanilla blobstore,这样我就不需要将另一个服务(及其客户端库)循环到我的应用程序中.

所以我再次问,如何在那里获得一个blob,以便我可以测试使用它的代码?

java google-app-engine automated-tests blobstore

6
推荐指数
1
解决办法
135
查看次数