コマンドラインJavaアプリケーションからGoogle App EngineのBlobStoreにアップロードする

blobstore command-line google-app-engine java python
コマンドラインJavaアプリケーションからGoogle App EngineのBlobStoreにアップロードする

これは、コマンドラインアプリケーションをアップロードするブロブストアのサーバー側コードです。

public class UploadServlet extends HttpServlet
{
    private static final Logger log = Logger.getLogger(UploadServlet.class.getName());

    private final BlobstoreService bs = BlobstoreServiceFactory.getBlobstoreService();

    protected void doPost(final HttpServletRequest request, final HttpServletResponse response) throws ServletException, IOException
    {
        final Map blobs = bs.getUploadedBlobs(request);
        final BlobKey blobKey = blobs.get("blob");

        if (blobKey == null)
        {
            log.severe("BlobKey was null!");
            response.sendRedirect("/error.html");
        }
        else
        {
            response.sendRedirect("/image?blob-key=" + blobKey.getKeyString());
        }
    }

    /**
     * Generates the custom single use blobstore URL's that are needed to upload to the blobstore programmatically. */
    protected void doGet(final HttpServletRequest request, final HttpServletResponse response) throws ServletException, IOException
    {
        final String uploadURL = bs.createUploadUrl("/upload");
        final PrintWriter pw = response.getWriter();
        response.setContentType("text/plain");
        pw.write(uploadURL);
    }
}

ローカル開発モードのサーバーに対して、認証コードなしで動作するように次のコードを取得しました。そのため、「multipart / form」コードが正常に動作し、認証コードで失敗します。

    r = opener.open(request)
  File "C:\Python26\lib\urllib2.py", line 397, in open
    response = meth(req, response)
  File "C:\Python26\lib\urllib2.py", line 510, in http_response
    'http', request, response, code, msg, hdrs)
  File "C:\Python26\lib\urllib2.py", line 435, in error
    return self._call_chain(*args)
  File "C:\Python26\lib\urllib2.py", line 369, in _call_chain
    result = func(*args)
  File "C:\Python26\lib\urllib2.py", line 518, in http_error_default
    raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
HTTPError: HTTP Error 302: Found

コマンドラインクライアントのJavaからPythonに移動しました。

f = urllib2.urlopen('http://myapp.appspot.com/upload')
bloburl = f.read(1024)
print bloburl
print

image = file('120.jpg', 'r')
form = MultiPartForm()
form.add_file('blob', 'blob', image, 'image/jpeg')

request = urllib2.Request(bloburl)
body = str(form)
request.add_header('Content-type', form.get_content_type())
request.add_header('Content-length', len(body))
request.add_data(body)

opener = auth.get_auth_opener('myapp', 'username', 'password')
r = opener.open(request)
data = r.read()
print data

ファイルを取得してBlobStoreに投稿する単純なコマンドラインツールが必要です。 インターネット上のどこにも* COMPLETE *の例が1つも見つかりません。 GAEですべての作業を行う多くの例がありますが、別のクライアントから「FORM」の「POST」を行うコマンドラインクライアントはありません。

  2  0


ベストアンサー

http://code.google.com/appengine/docs/java/blobstore/overview.html#Writing_Files_to_the_Blobstore [バージョン1.4.3以降には実験的なAPI]があり、ブロブストアに直接書き込みます。 + POSTを使用してブロブストアにアップロードする必要がなくなります。

1


タイトルとURLをコピーしました