我正在使用App Engine中的blobstore和imagesService.我想知道我从imagesService.getServingUrl(blobKey)获得的URL会持续多长时间.如果我使用它来存储用户个人资料图片,我可以将此URL存储在用户中,还是应该存储BlobKey并在每次需要图片时获取servingUrl?
我目前正在使用blobstore为图像生成缩略图,但是,我喜欢在img标记中存储缩略图的尺寸,因为这是一种很好的做法,有助于加快渲染速度并使部分加载的页面看起来更好一些.
如何只计算原始图像的尺寸,如何计算blobstore生成的缩略图的尺寸?
我以前的尝试并不是很准确,大部分时间都是一两个像素(可能是由于四舍五入).
我知道获取缩略图而不是使用图像API检查尺寸会起作用,但我认为效率低下.
这是我目前用来计算它的代码,然而,它偶尔偏离一个像素,导致浏览器稍微拉伸图像,导致调整大小的文物以及性能较差.
from __future__ import division
def resized_size(original_width, original_height, width, height):
original_ratio = float(original_width) / float(original_height)
resize_ratio = float(width) / float(height)
if original_ratio >= resize_ratio:
return int(width), int(round(float(width) / float(original_ratio)))
else:
return int(round(float(original_ratio) * float(height))), int(height)
Run Code Online (Sandbox Code Playgroud)
准确性非常重要!
我正在开发一款适用于Android的简单多媒体消息应用程序,我正在尝试使用Google AppEngine的BlobStore作为我的云存储,用于传输各种图像,视频和音频文件.但是,我所看到的所有上传到blobstore的例子都假设我是通过HTTP表单来做的,所以我有点不知道该做什么.
我见过几个人问同样的问题,但他们似乎都没有得到满意的答案.我可以或者应该以这种方式使用AppEngine的blobstore,如果是这样,我该如何去做呢?
谢谢,所以.
我正在使用blobstore和我的Google App Engine应用程序,一切都在生产服务器和开发服务器上运行良好.然而,使用testbed和webtest进行测试是行不通的......
在我的测试中,blob存在,因为我可以像这样访问它:
blob = self.blobstore_stub.storage._blobs[key]
Run Code Online (Sandbox Code Playgroud)
当我尝试在我的测试中下载blob时
response = self.app.get("/blob-download/2")
Run Code Online (Sandbox Code Playgroud)
我的blobstore下载处理程序永远不会被调用,我得到404错误(但链接在dev或prod服务器上工作).
我怀疑这是testbed或webtest的错误...
关于我可能做错什么的任何想法,或者如果这是一个错误的testbed/webtest可能是一个好的工作,以便我可以测试我的代码的这部分?
以下是有关我如何设置测试的一些信息.
import unittest
from webtest import TestApp
from google.appengine.ext import db, testbed
from google.appengine.api import users
from google.appengine.api import apiproxy_stub_map
class ExampleTests(unittest.TestCase):
def setUp(self):
self.testbed = testbed.Testbed()
self.testbed.setup_env(app_id="stv")
self.testbed.activate()
self.testbed.init_datastore_v3_stub()
self.testbed.init_taskqueue_stub()
self.testbed.init_mail_stub()
self.testbed.init_blobstore_stub()
self.app = TestApp(main.application)
apiproxy_stub_map.apiproxy.GetStub("datastore_v3").Clear()
self.taskqueue_stub = apiproxy_stub_map.apiproxy.GetStub('taskqueue')
self.mail_stub = apiproxy_stub_map.apiproxy.GetStub('mail')
self.blobstore_stub = apiproxy_stub_map.apiproxy.GetStub('blobstore')
def testBlob(self):
# create blob using files.blobstore.create
response = self.app.get("/blob-download/2") # This returns 404
self.assertEqual(response.body, "content of blob") …Run Code Online (Sandbox Code Playgroud) 谷歌应用引擎blobstore服务如何处理文件上传32 MB没有任何TimeOut异常.此外,它不会影响应用引擎的请求 - 响应间隔一分钟.它背后会有什么样的过程.
我目前正在GAE Blobstore中存储一堆.docx文件.我最近注意到这些文件在某些计算机(IE 9 for Windows 7)上没有文件扩展名下载,但适用于其他人(IE 8,Chrome for Windows 7).
以下是文件存储在blobstore中的方式:
f = files.blobstore.create(mime_type='application/vnd.openxmlformats-officedocument.wordprocessingml.document',
_blobinfo_uploaded_filename=filename)
## then some code to write data and save ##
Run Code Online (Sandbox Code Playgroud)
以下是Chrome检查器中文件的响应标头:
Cache-Control:no-cache
Content-Disposition:attachment; filename="causes_of_ww1_emanresu"
Content-Length:12120
Content-Type:application/vnd.openxmlformats-officedocument.wordprocessingml.document
Date:Fri, 26 Oct 2012 23:54:09 GMT
Server:Google Frontend
X-AppEngine-Estimated-CPM-US-Dollars:$0.000033
X-AppEngine-Resource-Usage:ms=15 cpu_ms=0
Run Code Online (Sandbox Code Playgroud)
这是我如何服务blob:
self.send_blob(blob_info, save_as=blob_info.filename, content_type=blob_info.content_type)
Run Code Online (Sandbox Code Playgroud)
我甚至尝试过硬编码content_type='application/vnd.openxmlformats-officedocument.wordprocessingml.document'无济于事.
关于发生了什么以及如何解决问题的任何想法?
根据要求,这是我在最初保存blob时如何获取文件信息.我很确定在这个级别上没有出现错误,但这是问题的前兆:
# get the file from a file_url with urlfetch
result = urlfetch.fetch(file_url)
headers = result.headers
# some custom functions to return a filename
username = self.get_username()
filename = get_filename(title, …Run Code Online (Sandbox Code Playgroud) google-app-engine internet-explorer google-chrome http-headers blobstore
我想知道是否有人知道从谷歌应用程序引擎blob商店返回的图像网址有多长时间仍然有效?
我一直在跟踪网址,我在2013年1月3日从blob商店提供了一张图片并且它仍在那里.
我特别要求,所以我可以缓存图片网址而不是尝试反复提供.如果我这样做,我仍然会检查图像是否存在,但我需要多久检查一次
谢谢!
有人可以帮我澄清一下.我正在https://developers.google.com/appengine/docs/java/blobstore/overview上阅读有关blobstore的开发者页面.我似乎无法绕过保存和检索blob的过程?这听起来像
这是过程吗?也许是因为我度过了漫长的一天,但我却看不到它.如果某人有一个例子,他们不介意分享,请发布.我只需要在blobstore中保存android中的图像,然后能够使用blobkey或其他方式检索它们.
我已经看过了
对于我的生活,我不知道他们为什么不为我做这件事.
我想有些问题是:
Applications Overview,以我在数据存储区中的方式查看属于我的应用程序的所有blob吗?我想一个完整的,有效的代码可以帮助我看到这些答案.我的部分问题可能是我从未使用过servlet.我目前正在为我的api使用Google Cloud Endpoint.
我有一个表单,在文本字段之间包含一个上传图片的元素.
我想将blob存储在blobstore中并ndb.Model使用我的model()引用它ndb.BlobKeyProperty().此链接中
显示的方法使用上传处理程序(),该处理程序从以这种方式创建的链接中调用:UploadHandler
upload_url = blobstore.create_upload_url('/upload')
Run Code Online (Sandbox Code Playgroud)
upload_url是为上传blob而创建的页面中的表单操作.但是,我的表单包含未在UploadHandlerpost方法中处理的其他字段.我找到的临时解决方案是为我的表单创建一个处理程序,该处理程序继承自我的BaseHandler和BlobstoreUploadHandler:
class EditProfile(blobstore_handlers.BlobstoreUploadHandler, BaseHandler)
def get(self):
params['upload_url'] = blobstore.create_upload_url('/upload_blob1')
... fields ...
def post(self):
upload_blob = self.get_uploads()
blob_key = upload_blob[0].key()
value_field1 = self.request.POST.get('field1')
value_field2 = self.request.POST.get('field2')
value_field3 = self.request.POST.get('field3')
...
Run Code Online (Sandbox Code Playgroud)
这个方法有效,除了我必须main.py为每个要上传blob的页面定义一个新的处理程序:
app = webapp2.WSGIApplication([ ('/upload_blob1', handlers.EditProfile),
('/upload_blob2', handlers.EditBlob2Handler),
('/serve/([^/]+)?', handlers.ServeHandler) ],
debug=os.environ['SERVER_SOFTWARE'].startswith('Dev'), config=webapp2_config)
Run Code Online (Sandbox Code Playgroud)
问题:如何使用UploadHandler从不同页面调用的单个上载处理程序(例如:)来执行上载blob任务?我知道对于经验丰富的GAE程序员来说这可能非常简单,但我还没有找到解决方案.
这是我们的简单用例:user2想要将user1的文档复制到我们应用程序中的自己的存储库中.应该简单吧?我们需要做的就是在blobstore中创建第二个相同的blob,并返回我们可以与user2关联的密钥.我们必须在这里遗漏一些东西.似乎app引擎blob存储的主要功能是处理从浏览器上传和下载到浏览器的blob,并且启动服务器端的简单复制操作并不那么简单.
显而易见的解决方案似乎是在java中使用实验文件api,但没有爱.它起作用,直到你的文件大小超过MB左右,然后它失败,有些不可预测.当我们只需要在存储层中复制时,将它全部读入服务器层也似乎很愚蠢.此外,我们将实验性功能纳入生产环境的可能性很小,尽管非零.
关于我们环境的一些信息:应用程序是用Java编写的,我们使用的是blobstore,而不是云存储,现在就致力于它.我们是一个小型的部门团队,并希望说明应用引擎是一个很好的平台,但这个让我们感到难过.S3让这个简单明了,我们在这里错过了一些非常愚蠢的东西吗?
blobstore ×10
java ×3
python ×3
android ×2
blob ×1
file-upload ×1
http-headers ×1
thumbnails ×1
upload ×1