Google App Engine (Java) で画像をアップロードして保存する方法 質問する

Google App Engine (Java) で画像をアップロードして保存する方法 質問する

私は、画像 (ファイル) を GAE (java) にアップロードして保存する最も簡単な方法を探しています。何時間も Google 検索しましたが、単純で明確な結果は得られませんでした。

見つかったこのリンク

しかし、画像を保存する方法と取得する方法がまだわかりません。簡単なサーブレットの例を探しています。

ベストアンサー1

あなたが提供したリンク「アプリへのファイルのアップロードをどのように処理すればよいですか?」画像をアップロードする方法を説明します。

画像をホストするには、データストアサービス他のデータとともに画像を保存して提供します。

ここにサンプル コードがあります。これは、独自のエンティティ (ビジネス、ユーザーなど) に画像用のフィールドを持たせる方法を示すスケッチです。コードを簡素化するために、エラー処理と回復はすべて無視しました。

画像でエンティティを宣言します。タグ、場所など、他のフィールドがあることも考えられます。

@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 Commons ライブラリの一部であるクラスです。

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

おすすめ記事