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?
多部分形式:''
我该怎么做才能限制可以上传的文件的大小?我知道我可以用SWFUpload限制它的客户端,但是如何限制它的服务器端呢?
如何防止有人上传1GB文件并占用我的配额?
我需要使用App Engine BlobStore检索上传图像的高度和宽度.为了找到我使用以下代码:
try {
Image im = ImagesServiceFactory.makeImageFromBlob(blobKey);
if (im.getHeight() == ht && im.getWidth() == wd) {
flag = true;
}
} catch (UnsupportedOperationException e) {
}
Run Code Online (Sandbox Code Playgroud)
我可以上传图像并生成BlobKey但是当将Blobkey传递给makeImageFromBlob()时,它会生成以下错误:
java.lang.UnsupportedOperationException:没有可用的图像数据
如何解决这个问题或任何其他方式直接从BlobKey找到图像的高度和宽度.
我正在构建一个app-engine端点api,它从用户(Android应用程序)获取图片并以编程方式将其保存到blobstore.然后我将blob_key保存在我的数据存储区中.代码如下:
首先,我通过我接收到的图像@endpoint.method为messages.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
以下转换是否适用于从Java servlet转换为Google app-engine云端点?
从
public void doPost(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException { … }
Run Code Online (Sandbox Code Playgroud)
至
@ApiMethod(name = "save_blob_key", path = "save_blob_key" httpMethod = HttpMethod.POST)
public void saveBlobKey(HttpServletRequest req) throws IOException { … }
Run Code Online (Sandbox Code Playgroud)
背景:
我正在尝试使用端点来处理blobstore回调.
参考:https://developers.google.com/appengine/docs/java/blobstore/overview#Complete_Sample_App
问题:
这里最大的好处是以下两行似乎需要该类HttpServletRequest,我不知道是否可以将它传递给端点.
BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService();
Map<String, List<BlobKey>> blobs = blobstoreService.getUploads(req);
Run Code Online (Sandbox Code Playgroud)
编辑:
我一直在尝试很多路线来解决这个问题.我最新的是将blob servlet与端点api结合起来.我仍然无法使代码工作.所以赏金去的人谁提供了一个解决方案的信息,实际上导致了解决方案.
java google-app-engine servlets blobstore google-cloud-endpoints
我想避免使用GAE中的Webapp,所以我使用此代码将图像上传到Blobstore(代码片段来自:http://flask.pocoo.org/mailinglist/archive/2011/1/8/app- engine-blobstore /#7fd7aa9a5c82a6d2bf78ccd25084ac3b)
@app.route("/upload", methods=['POST'])
def upload():
if request.method == 'POST':
f = request.files['file']
header = f.headers['Content-Type']
parsed_header = parse_options_header(header)
blob_key = parsed_header[1]['blob-key']
return blob_key
Run Code Online (Sandbox Code Playgroud)
它返回它看起来确实是一个Blobkey,它是这样的:
2I9oX6J0U5nBCVw8kEndpw ==
然后我尝试使用以下代码显示最近存储的Blob图像:
@app.route("/testimgdisplay")
def test_img_display():
response = make_response(db.get("2I9oX6J0U5nBCVw8kEndpw=="))
response.headers['Content-Type'] = 'image/png'
return response
Run Code Online (Sandbox Code Playgroud)
可悲的是这部分不起作用,我得到以下错误:
BadKeyError: Invalid string key 2I9oX6J0U5nBCVw8kEndpw==
Run Code Online (Sandbox Code Playgroud)
你们之前遇到过这个错误吗?看起来Blobkey格式正确,我找不到线索.
google-app-engine blobstore flask python-2.7 google-cloud-datastore
我编写了一个Google App Engine应用程序,它利用Blobstore来保存以编程方式生成的数据.为此,我使用了Files API,遗憾的是,该API已被弃用,以支持Google云端存储.所以我正在重写我的助手类来使用GCS.
我希望保持接口尽可能与之前类似,也因为我在数据存储区中保留BlobKeys以保持对文件的引用(并且更改生产应用程序的模型总是很痛苦).当我将东西保存到GCS时,我检索一个BlobKey
BlobKey blobKey = blobstoreService.createGsBlobKey("/gs/" + fileName.getBucketName() + "/" + fileName.getObjectName());
Run Code Online (Sandbox Code Playgroud)
按此处的规定,我将其保留在数据存储区中.
所以这里有一个问题:文档告诉我如何blobstoreService.serve(blobKey, resp);在servlet响应中提供GCS文件,但是如何检索文件内容(如InputStream,字节数组或其他)以在我的代码中使用它进行进一步处理?在我目前的实现中,我通过FileReadChannel读取AppEngineFile(两者都弃用)来做到这一点.
当我们将文件上传到Google App Engine上的Blobstore时,我们发现每次上传_BlobInfo_都会创建一个类型的实体,可以在数据存储区查看器下的本地开发控制台中看到http://localhost:8888/_ah/admin,但是在将应用程序部署到App Engine之后,不会创建这样的实体当我们将文件上传到Blobstore时.它看起来很奇怪,想知道我在这里是否遗漏了什么.
我正在使用Google App Engine for Java,我正在尝试为处理blobstore的代码编写JUnit测试.如何在blobstore中放置blob以在测试期间使用(在配置为使用LocalBlobstoreServiceTestConfig将所有内容保存在内存中之后)?似乎解决方案应该非常简单和基本,但不知怎的,我找不到它.
我想可以使用Files API,但我已经避开了它,因为它已经停止(下周).
我知道在测试之外将blob放入blobstore的唯一方法是通过多部分表单上传.但是,我不知道如何在JUnit测试的上下文中这样做.
也可以通过blobstore API与Google Cloud Storage对象进行交互,但我选择使用vanilla blobstore,这样我就不需要将另一个服务(及其客户端库)循环到我的应用程序中.
所以我再次问,如何在那里获得一个blob,以便我可以测试使用它的代码?
tl; dr:如何将javax.activation.DataSource依赖项添加到通过App Engine Maven插件运行的服务器上?
我正在使用App Engine Maven插件部署到本地App Engine服务器,并且正在尝试使用Blobstore API上载文件。我正在使用Java 11。
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>io.happycoding</groupId>
<artifactId>blobstore-test</artifactId>
<version>1</version>
<packaging>war</packaging>
<properties>
<!-- App Engine currently supports Java 8 -->
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<failOnMissingWebXml>false</failOnMissingWebXml>
</properties>
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.taglibs</groupId>
<artifactId>taglibs-standard-spec</artifactId>
<version>1.2.5</version>
</dependency>
<dependency>
<groupId>com.google.appengine</groupId>
<artifactId>appengine-api-1.0-sdk</artifactId>
<version>1.9.59</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>com.google.appengine</groupId>
<artifactId>appengine-maven-plugin</artifactId>
<version>1.9.71</version>
</plugin>
</plugins>
</build>
</project>
Run Code Online (Sandbox Code Playgroud)
index.jsp
<%@ page import="com.google.appengine.api.blobstore.BlobstoreServiceFactory" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
</head> …Run Code Online (Sandbox Code Playgroud) java google-app-engine maven blobstore appengine-maven-plugin
blobstore ×10
java ×6
python-2.7 ×2
android ×1
file-upload ×1
flask ×1
image ×1
maven ×1
servlets ×1