小编Arn*_*e S的帖子

Google App Engine:如何将大型文件写入Google云端存储

我正在尝试将大型文件从Google App Engine的Blobstore保存到Google云端存储,以方便备份.

它适用于小文件(<10 mb),但对于较大的文件,它会变得不稳定,GAE抛出和FileNotOpenedError.

我的代码:

PATH = '/gs/backupbucket/'
for df in DocumentFile.all():           
  fn = df.blob.filename
  br = blobstore.BlobReader(df.blob)
  write_path = files.gs.create(self.PATH+fn.encode('utf-8'), mime_type='application/zip',acl='project-private') 
  with files.open(write_path, 'a') as fp:
    while True:
      buf = br.read(100000)
      if buf=="": break
      fp.write(buf)
  files.finalize(write_path)
Run Code Online (Sandbox Code Playgroud)

(在一个taskeque中运行,以避免超过执行时间).

抛出FileNotOpenedError:

Traceback (most recent call last):
  File "/base/python27_runtime/python27_lib/versions/third_party/webapp2-2.3/webapp2.py", line 1511, in __call__
    rv = self.handle_exception(request, response, e)
  File "/base/python27_runtime/python27_lib/versions/third_party/webapp2-2.3/webapp2.py", line 1505, in __call__
    rv = self.router.dispatch(request, response)
  File "/base/python27_runtime/python27_lib/versions/third_party/webapp2-2.3/webapp2.py", line 1253, in default_dispatcher
    return route.handler_adapter(request, response)
  File "/base/python27_runtime/python27_lib/versions/third_party/webapp2-2.3/webapp2.py", line 1077, in …

python google-app-engine google-cloud-storage

5
推荐指数
1
解决办法
2774
查看次数

Cloud Shell 上 dev_appserver 上的 Google Cloud 存储

我正在尝试使用 GAE 中的 Google Cloud Storage,并且在部署时一切正常。但是,我无法让存储在 Google Cloud Shell 上运行的开发服务器上运行。

我正在使用 cloudtorage API 并且我理解 dev_appserver 应该访问与部署的应用程序相同的存储桶。对我来说,使用本地数据也可以。

开发服务器由 dev_appserver.py .

我玩过未记录的default_gcs_bucket_name标志,但没有运气。

我已经使用 gcloud init 设置了他的 cloud shell 来处理正确的项目。我也曾尝试使用新的google.cloud.storageAPI,但没有走运。

如果我运行此处提供的示例,则会触发与下面提到的相同的错误:App Engine 和 Google Cloud Storage 示例

任何人?

编辑:无论我提供有效还是无效的存储桶名称,我都会收到相同的错误。

应用程序.yaml

runtime: python27
api_version: 1
threadsafe: true

builtins:
- remote_api: on

handlers:
- url: /.*
  script: main.app
Run Code Online (Sandbox Code Playgroud)

主文件

import logging
import cloudstorage as gcs
import webapp2
from google.appengine.api import app_identity

class MainPage(webapp2.RequestHandler):
    def get(self):
        self.response.headers['Content-Type'] = 'text/plain' …
Run Code Online (Sandbox Code Playgroud)

google-app-engine google-cloud-storage dev-appserver-2 google-cloud-shell

5
推荐指数
1
解决办法
818
查看次数

NDB:如何将get_by_id用于实体组中的实体

我正在使用get_by_id()来读取NDB中的实体,我不认为它适用于属于实体组的实体:

from google.appengine.ext import ndb

class Folder(ndb.Model):
    name = ndb.StringProperty()

parent_folder_key = Folder(name = 'Parent folder').put()    
sub_folder_key = Folder(name = 'Subfolder', parent=parent_folder_key).put() 

id_list = []
print 'All folders:'
for f in Folder.query():
  print f
  id_list.append(f.key.id())

print '\nFolders by id:'
for id in id_list:
  print Folder.get_by_id(id)
Run Code Online (Sandbox Code Playgroud)

输出:

All folders:
Folder(key=Key('Folder', 5814), name=u'Parent folder')
Folder(key=Key('Folder', 5814, 'Folder', 5815), name=u'Subfolder')

Folders by id:
Folder(key=Key('Folder', 5814), name=u'Parent folder')
None
Run Code Online (Sandbox Code Playgroud)

是设计还是错误?我之前看到使用名称空间时出现了与get_by_id()有关的一些问题(我使用的是SDK 1.6.6).我如何拥有来自id的父母的文件夹?

python google-app-engine app-engine-ndb

4
推荐指数
1
解决办法
3197
查看次数

如何以编程方式确定ndb属性是否为多值

我正在将应用程序从Datastore转换为ndb,并在xml导入例程中遇到问题.问题是我无法以编程方式确定ndb.model类的属性是否是多值属性.

我怀疑这是由于缺乏基本的Python技能,因为到目前为止我提出的代码显示该值是"可见的".因此我无法抓住它.请帮忙.

from google.appengine.ext import ndb

class House(ndb.Model):
  name = ndb.StringProperty()   
  rooms = ndb.StringProperty(repeated=True) 

print 'Properties:'
for p in House._properties:
  print getattr(House,p)

print '\nRepeated:'
for p in House._properties:
  print getattr(getattr(House,p),'repeated',None)
Run Code Online (Sandbox Code Playgroud)

这导致以下结果:

Properties:
StringProperty('rooms', repeated=True)
StringProperty('name')

Repeated:
None
None
Run Code Online (Sandbox Code Playgroud)

python google-app-engine app-engine-ndb

3
推荐指数
2
解决办法
2181
查看次数

Google Cast:如何在默认媒体播放器中显示元数据?

我试图让我的 chrome 发送器应用程序将元数据发送到默认媒体接收器应用程序,但默认媒体接收器不显示元数据。我找不到文档或示例。有谁知道如何实施这个?下面的代码播放音频,但播放器不显示任何图像或其他元数据。

初始化:

 var sessionRequest = new chrome.cast.SessionRequest(chrome.cast.media.DEFAULT_MEDIA_RECEIVER_APP_ID);
  var apiConfig = new chrome.cast.ApiConfig(sessionRequest,
    sessionListener,
    receiverListener);
  chrome.cast.initialize(apiConfig, onInitSuccess, onError);
  chrome.cast.requestSession(onRequestSessionSuccess, onLaunchError);
Run Code Online (Sandbox Code Playgroud)

...

加载媒体

url = "url-to-media"
var mediaInfo = new chrome.cast.media.MediaInfo(url, 'audio/aac');
mediaInfo.metadata = new chrome.cast.media.MusicTrackMediaMetadata()
mediaInfo.metadata.albumName = 'This is the name of the album'
mediaInfo.metadata.artistName = 'This is the name of the artist'
mediaInfo.metadata.songName = 'This is the name of the song'
im = chrome.cast.Image('http://m1.behance.net/rendition/modules/575407/disp/822271229466847.png')
mediaInfo.metadata.images = new Array(im)
var request = new chrome.cast.media.LoadRequest(mediaInfo);
session.loadMedia(request,onMediaDiscovered.bind(this, 'loadMedia'), onMediaError())
Run Code Online (Sandbox Code Playgroud)

google-chrome google-cast

2
推荐指数
1
解决办法
3139
查看次数