简体   繁体   English

将图像上传到Google App Engine上的Blob存储

[英]Uploading images to blob store on google app engine


I am new to app engine and working on uploading an image on blob store. 我是App Engine的新手,正在致力于在Blob存储上上传图像。 I am uploading image from android application. 我正在从android应用程序上传图片。 I have plan to save blob key in an entity, so that I can retrieve it if it matches certain condition. 我已计划将Blob键保存在实体中,以便在它符合特定条件时可以检索它。

My problems are : 我的问题是:
1. ever since I have implemented "upload handler" blob store is not storing images. 1.自从我实现了“上传处理程序”以来,blob存储区就不存储图像。 Before implementing "Upload handler" it was saving it properly. 在实施“上传处理程序”之前,它已正确保存。
2. Another issue is, upload handler is not getting any blob keys. 2.另一个问题是,上传处理程序未获取任何Blob键。

Please find the code below: 请在下面找到代码:

For uploading image following code is used in Android: 为了上传图片,Android中使用了以下代码:

public void uploadBlobImage( String path, String link ) {
        HttpClient httpclient = new DefaultHttpClient();
        HttpPost httppost = new HttpPost(link);

        try {
            MultipartEntity entity = new MultipartEntity();
            entity.addPart("type", new StringBody("photo"));
            File file = new File( path );
            entity.addPart("data", new FileBody(file, ContentType.create( "image/jpg")/*,"Swapnil.jpg" */));

            httppost.setEntity(entity);
            HttpResponse response = httpclient.execute(httppost);
            Log.d( Utils.AppName, "Image uploaded: "+ response.getStatusLine( ));
        } catch (Exception e) {
            Log.d( Utils.AppName, "Image not uploaded: Exception:"+ e.toString( ));
        }        
    }

Upload link is of the form: 上传链接的格式为:

http://<server domain>/_ah/upload/AMmfu6YsZrgX5lDxBjlb5ddPQdGU6kd63WD9nN8FI2rOGpC1VA9qoyYneKYiLvNGNR0Mw-Oi_LyfKzxI9lvL7rjk0CoTuN7O_1rRCmTKLB2c4MOjRWJ8BKuiaquIvcQf-1H47ULHbMoY6w5_lZts8JiG1DDPez8iAQ/ALBNUaYAAAAAUzv_0cB5QIh3hkGn4CokBt0a37zGDAGm/

Upload blob handler code is: 上传Blob处理程序的代码为:

public class UploadBlobHandler extends HttpServlet {

    @Override
    public void doPost(HttpServletRequest req, HttpServletResponse res)
        throws ServletException, IOException {
        BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService();

        Map<String, List<BlobKey>> blobs = blobstoreService.getUploads( req );
        Set< String > set = blobs.keySet( );
        Utils.log.log( Level.SEVERE, "UploadBlobHandler.doPost() size::"+set.size( ));
        Iterator< String > iterator = set.iterator( );
        while ( iterator.hasNext( )) {
            Utils.log.log( Level.SEVERE, "UploadBlobHandler.doPost(): Blobstore key: "+iterator.next( ));
        }
        List< BlobKey> list = blobs.get("data");
        for(int i=0;list !=null && i<list.size( );i++){
            BlobKey key = list.get( i );
            Utils.log.log( Level.SEVERE, "UploadBlobHandler.doPost(): Blobstore key: "+key.getKeyString( ));
        }
}

I tried adding and removing following entry in web.xml: 我尝试在web.xml中添加和删除以下条目:

<servlet>
        <servlet-name>UploadBlobHandler</servlet-name>
        <servlet-class>com.swapnilutilities.eRecommendation.servlets.UploadBlobHandler</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>UploadBlobHandler</servlet-name>
        <url-pattern>/upload</url-pattern>
    </servlet-mapping>

On android following log is generated: 在android上,将生成以下日志:

Image uploaded: HTTP/1.1 200 OK

On server log was: 在服务器日志上是:

0.1.0.30 - - [02/Apr/2014:05:02:02 -0700] "POST /upload HTTP/1.1" 200 53 - "Apache-HttpClient/UNAVAILABLE (java 1.4)" "domain.com" ms=327 cpu_ms=260 cpm_usd=0.000006 app_engine_release=1.9.2 instance=00c61b117cbb73996c2a0799c02bf971906801e2
E 2014-04-02 17:32:02.764
package.UploadBlobHandler doPost: UploadBlobHandler.doPost() size::0
E 2014-04-02 17:32:02.765
package.utils.Utils writeResponse: Swapnil: writeResponse():{"status":0,"ec":0}

Please guide me for this. 为此,请指导我。

Problem got solved. 问题解决了。 Though I don't understand why did it occur. 虽然我不明白为什么会这样。 I changed 我变了

new FileBody(file, ContentType.create( "image/jpg")/*,"Swapnil.jpg"*/ )

to

new FileBody(file, ContentType.create( "image/jpg"),"Swapnil.jpg" ).

For some reason it solved the issue. 由于某种原因,它解决了这个问题。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 在App Engine Blob存储中存储图像的最佳方法是什么? - What is the best way to store images in App Engine Blob Storage? Google App Engine-具有Dispatcher Servlet的Blob存储服务 - Google App Engine - Blob Store Service with a Dispatcher Servlet 一步上传,使用Google App Engine上传图片 - A one step upload for uploading images using google app engine 将文件上传到Blob存储时,Google App Engine和自定义域的CORS问题 - CORS issue with Google App Engine and custom domain when uploading files to blob storage 在Android设备上使用HTTP Post将数据放到Google App Engine的Blob存储中 - Using HTTP Post on an android device to put data on google app engine's blob store 如何从URL检索图像并将其存储为Java中的Blob(Google App引擎) - How to I retrieve an image from a URL and store it as a Blob in Java (google app engine) 如何使用blobKey从Google App Engine中的Blob存储中提取文件的名称,内容/类型和大小? - How to use blobKey to pull out the names,content/type and size of the file from blob store in Google app engine? 在Google App Engine上解压缩java中的大blob - Decompressing a large blob in java on Google App Engine Google App Engine Blob操作[常规] - Google App Engine Blob Operations [General] Google App Engine Blobstore图片 - Google App Engine Blobstore Images
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM