如何上传和存储谷歌应用程序引擎的图像(Java) [英] How to upload and store an image with google app engine (java)

查看:127
本文介绍了如何上传和存储谷歌应用程序引擎的图像(Java)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在寻找最简单的方法来上传图像(文件)并将其存储到GAE(java)。
Google搜寻几小时没有任何简单明了的结果... :( b
$ b

找到此链接

但我仍然不知道如何存储image,以及如何检索它...
我正在寻找简单的servlet exmample ...

解决方案

请链接您提供的如何处理文件上传到我的应用程序? a>解释了如何上传图片。



要托管图片,您需要使用 Datastore服务来存储和提供图片以及其他数据。



这是一个示例代码,它的意思是作为一个草图,你如何让自己的实体(ig business,user等)拥有一个图像的字段,我忽略了所有的错误处理和恢复来简化代码。



用图像声明您的实体。你可以想象有其他领域,例如标签,位置等

  @Entity 
公共类MyImage {
@PrimaryKey
@持久(valueStrategy = IdGeneratorStrategy.IDENTITY)
私人长ID;

@Persistent
私人字符串名称;

@Persistent
Blob图片;
$ b $ public MyImage(){} $ b $ public MyImage(String name,Blob image){
this.name = name;
this.image = image;
}

// JPA getter和setter和空构造函数
// ...
public Blob getImage(){return image; }
public void setImage(Blob image){this.image = image;然后,当你开始接受图像(注意的情况下,一个图像与除了典型的文件上传失败之外,已经上传了相同的名称)。 ServletFileUpload IOUtils 是属于Apache Commons库的类。

  //你的上传句柄看起来像
public void doPost(HttpServletRequest req,HttpServletResponse res){
//获取图像表示
ServletFileUpload upload = new ServletFileUpload();
FileItemIterator iter = upload.getItemIterator(req);
FileItemStream imageItem = iter.next();
InputStream imgStream = imageItem.openStream();

//构造我们的实体对象
Blob imageBlob = new Blob(IOUtils.toByteArray(imgStream));
MyImage myImage = new MyImage(imageItem.getName(),imageBlob);

//持久图像
PersistenceManager pm = PMF.get()。getPersistenceManager();
pm.makePersistent(myImage);
pm.close();

//回应查询
res.setContentType(text / plain);
res.getOutputStream()。write(OK!。getBytes());
}

最后,当您想要提供名称的图片时:

  Blob imageFor(String name,HttpServletResponse res){
//找到想要的图片
PersistenceManager pm = PMF.get ().getPersistenceManager();
Query query = pm.newQuery(from MyImage select+
where name = nameParam+
parameters String nameParam);
列表< MyImage> results =(List< MyImage>)query.execute(name);
Blob image = results.iterator()。next()。getImage();

//提供第一张图片
res.setContentType(image / jpeg);
res.getOutputStream()。write(image.getBytes());
}


I am looking for the simplest way to upload and store an image (file) to the GAE (java). Googling for hours without any simple and clear result... : (

Found this link.

But I still don't know how to store an image, and how to retrieve it... I am looking for simple servlet exmample...

解决方案

The link your provided "How do I handle file uploads to my app?" explains how you can upload the image.

To host the images, you need to use the Datastore service to store and serve image along with your other data.

Here is a sample code. It is meant as a sketch, for how you can have your own entity (i.g. business, user, etc) have a field for an image. I ignored all error handling and recovery to simplify the code.

Declaring your entity with the image. You can imagine having other fields, e.g. tags, location, etc

@Entity
public class MyImage {
    @PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
    private Long id;

    @Persistent
    private String name;

    @Persistent
    Blob image;

    public MyImage() { }
    public MyImage(String name, Blob image) {
        this.name = name; 
        this.image = image;
    }

    // JPA getters and setters and empty contructor
    // ...
    public Blob getImage()              { return image; }
    public void setImage(Blob image)    { this.image = image; }
}

Then when you start accepting images (watch out for cases where an image with the same name has already been uploaded in addition to the typical file upload failures). ServletFileUpload and IOUtils are classes that are part of the Apache Commons library.

// Your upload handle would look like
public void doPost(HttpServletRequest req, HttpServletResponse res) {
    // Get the image representation
    ServletFileUpload upload = new ServletFileUpload();
    FileItemIterator iter = upload.getItemIterator(req);
    FileItemStream imageItem = iter.next();
    InputStream imgStream = imageItem.openStream();

    // construct our entity objects
    Blob imageBlob = new Blob(IOUtils.toByteArray(imgStream));
    MyImage myImage = new MyImage(imageItem.getName(), imageBlob);

    // persist image
    PersistenceManager pm = PMF.get().getPersistenceManager();
    pm.makePersistent(myImage);
    pm.close();

    // respond to query
    res.setContentType("text/plain");
    res.getOutputStream().write("OK!".getBytes());
}

And finally when you want to serve an image given its name:

Blob imageFor(String name, HttpServletResponse res) {
    // find desired image
    PersistenceManager pm = PMF.get().getPersistenceManager();
    Query query = pm.newQuery("select from MyImage " +
        "where name = nameParam " +
        "parameters String nameParam");
    List<MyImage> results = (List<MyImage>)query.execute(name);
    Blob image = results.iterator().next().getImage();

    // serve the first image
    res.setContentType("image/jpeg");
    res.getOutputStream().write(image.getBytes());
}

这篇关于如何上传和存储谷歌应用程序引擎的图像(Java)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆