python - 使用PhoneGap + Google App Engine上传和保存图像

标签 python google-app-engine cordova google-cloud-storage

目标:在 PhoneGap 应用程序中拍摄/附加图片,并将每张图片的公共(public) URL 发送到 Google Cloud SQL 数据库。

问题 1:有没有办法从 Base64 编码图像(在 Python 中)创建 Google Cloud Storage 对象,然后将该对象上传到存储桶并返回公共(public)链接?

我希望使用 PhoneGap 将图像发送到 Python Google App Engine 应用程序,然后让该应用程序将图像发送到我设置的 Google Cloud Storage 存储桶,然后将公共(public)链接返回到 PhoneGap 应用程序。这些图像可以直接从应用程序获取,也可以从用户设备上的现有照片附加。

我使用 PhoneGap 的 FileTransfer 插件将图像上传到 GAE,这些图像作为 base64 编码图像发送(这不是我可以控制的)。

根据我在 Google Docs 中找到的内容,我可以将图像上传到 Blobstore;但是,它需要 <input type='file'>表单中的元素。我没有"file"输入元素;我只是获取从 PhoneGap 的相机对象返回的图像 URI,并显示所拍摄(或附加)的图片的缩略图。

问题 2:是否有可能拥有 <input type='file'>元素并控制它的值?例如,是否可以根据用户是否选择文件或拍照来设置它的值?

提前致谢!

最佳答案

这里为其他可能遇到此问题的人提供了一个解决方案。事实证明这非常简单!

为 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);
    }
}

我希望它对其他人有帮助。 :)

关于python - 使用PhoneGap + Google App Engine上传和保存图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24655877/

相关文章:

python - 在一行中分配多个变量

python - 如何计算类似于 YouTube 的短定长混淆 ID(例如 2WNrx2jq184)

file - 无法在 Phonegap 中使用 inappbrowser 下载文件?

Python 组合导致 AttributeError

python - Python 3 解释器是否具有 JIT 功能?

python - 如何根据PyQt5中的内容获取框架的最小尺寸/固定尺寸?

java - 如何使用 Java 防止 Google App Engine 中的竞争条件?

node.js - GAE 上的 Nodejs Websocket

javascript - Cordova 套接字编程

android - cordova 7.x 添加自定义平台——我们得到了哪些好处?