目标:在PhoneGap应用程序中获取/附加图片,并将每张图片的公共URL发送到Google Cloud SQL数据库。
问题1:有没有办法从base64编码的图像(在Python中)创建Google云端存储对象,然后将该对象上传到存储桶并返回公共链接?
我希望使用PhoneGap将图像发送到Python Google App Engine应用程序,然后让该应用程序将图像发送到我设置的Google Cloud Storage存储桶,然后将公共链接返回给PhoneGap应用程序。这些图片既可以直接从应用中获取,也可以通过用户设备上的现有照片附加。
我使用PhoneGap的FileTransfer插件将图像上传到GAE,这些图像作为base64编码图像发送(这不是我可以控制的)。
根据我在Google文档中找到的内容,我可以将图片上传到Blobstore;但是,它需要表单中的<input type='file'>
个元素。我没有“归档”#39;输入元素;我只是从PhoneGap的相机对象中获取图像URI,并显示拍摄(或附加)图片的缩略图。
问题2:是否可以拥有<input type='file'>
元素并控制它的价值?如何,是否可以根据用户选择文件或拍照来设置其值?
提前致谢!
答案 0 :(得分:2)
这是针对可能面临此问题的其他人的解决方案。事实证明它非常简单!
为GAE项目设置存储桶后,您可以使用此Python代码将图像发送到存储桶:
import cloudstorage as gcs
import webapp2
import cgi
import MySQLdb
import os
import logging
import time
from google.appengine.api import mail
from google.appengine.api import images
from google.appengine.ext import blobstore
class UploadImageHandler(webapp2.RequestHandler):
def post(self):
self.response.headers.add_header(ACCESS_CONTROL, '*')
f = self.request.POST['image']
fname = '/your-bucket-name/%s' % f.filename;
gcs_file = gcs.open(fname, 'w', content_type="image/jpeg")
gcs_file.write(self.request.get('image'))
gcs_file.close()
用于从PhoneGap应用程序上传文件的代码:
// Uploads images in "imageURIs" to the web service specified in "server".
function uploadImages(imageURIs, server) {
var success = function(data) {
alert("Successfully uploaded image!");
};
var fail = function(error) {
alert("Failed to upload image: "+error);
};
var options = new FileUploadOptions();
options.fileKey = "image";
options.mimeType = "image/jpeg";
var ft = new FileTransfer();
for (var i = 0; i < imageURIs.length; i++) {
alert("Uploading"+i);
options.fileName = imageURIs[i].substr(imageURIs[i].lastIndexOf('/') + 1);
ft.upload(imageURIs[i], encodeURI(server), success, fail, options);
}
}
我希望它可以帮助别人。 :)
答案 1 :(得分:0)
是的,这对GAE和GCS很有用。您本身不需要<input type=file>
。您只需在对GAE网址的调用中设置POST
参数即可。确保您也发送隐藏密钥,并使用SSL加密的网址,以防止垃圾邮件发送者发布到您的应用。