我正在尝试将大型文件从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 … 我正在尝试使用 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
我正在使用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的父母的文件夹?
我正在将应用程序从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) 我试图让我的 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)