当前位置: 首页 > 面试题库 >

如何使用Google App Engine(Java)上传和存储图像

东郭赞
2023-03-14
问题内容

我正在寻找将图像(文件)上传和存储到GAE(java)的最简单方法。搜寻数小时,没有任何简单明确的结果。

找到了此链接。

但是我仍然不知道如何存储图像以及如何检索图像。我在寻找简单的servlet示例。


问题答案:

您提供的链接“我如何处理文件上传到我的应用程序?”

解释了如何上传图像。

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

这是示例代码。它是一个草图,用于显示如何使自己的实体(例如企业,用户等)具有图像字段。为了简化代码,我忽略了所有错误处理和恢复。

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

@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; }
}

然后,当您开始接受图像时(请注意,除了典型的文件上传失败以外,还具有相同名称的图像已被上传的情况)。
ServletFileUpload并且IOUtils是属于Apache的共享库的一部分课程。

// 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());
}

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

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


 类似资料:
  • 文件已完全损坏。如果我上传一个文本文件,它在文件的开头有一行废话,在文件的结尾有一行废话,比如: 我如何告诉云存储我想把数据存储为文件?

  • 我尝试用php建立一个上传图片系统。经过测试,系统回声“图像已上传”,但在数据库中没有显示。这是我的密码 upload.php get.php 我点击了提交按钮,没有选择任何文件,这2行警告显示出来 警告:file_get_contents():upload.php第14行中的文件名不能为空。 line14是这个$Image=addslash(file_get_contents($_FILES['

  • 问题内容: 我在图像上传服务器上使用redis和spring框架。我需要将图像存储到Redis。我发现以下问题,但这是针对python的。如何使用python /PIL将图像存储到redis 我不确定这是否是最好的方法,但我想知道如何在Java中进行操作(最好使用spring框架)。我正在使用使用jedis的spring-data-redis。 我想知道将图像存储在Redis中是否是一个很好的策略

  • 我的问题是:当我使用活动存储时,如何从URL上传图像。我在Stackoverflow中使用了来自其他帖子的代码,但传递了model方法,即我需要存储在表中的param。奇怪的是,我收到了下一个错误: 但是当我从这个模型重新加载show视图时,图像显示为存储并部署在我的posts视图中。 在这里我的代码后模型: 这是我在控制器的编辑操作中的代码: 我得到了以下链接,其中谈到了从URL上传图像的机会,

  • 问题内容: 我想将图像的下载URL放入Firebase数据库中。我可以将图像上传到存储中,但无法弄清楚如何将URL与其余的“帖子”一起放入数据库。 问题答案: 像这样组织您和func: 接下来,只需连接并保存到您的节点即可。 您也可以查看我有关上传数据并将URL保存到数据库的答案 希望能帮助到你

  • 但是如何使用Firebase来使用不由Firebase管理的现有存储桶(尽管它拥有与创建Firebase应用程序所使用的相同的谷歌云账户的管理员访问权限)?