1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

即売会サービスを作ろう8(画像アップローダ編)

Last updated at Posted at 2014-05-10

アイテムの登録、編集機能を作っていて気づいたのですが
いまのapiだと1つのapiで複数の画像をアップロードすることになるため
送信時間が非常に長く、ユーザー体験が悪くなってしまいます。

このあたり他のアプリはどうやっているのかなとメルカリ(http://mercari.jp )を調べたのですが
メルカリは1画像を選択するごとにサーバにアップロードしているようです。

そんなわけでマネしてみました。
アップローダーの完成です。
メルカリ触ってて思ったのですが、いつかは画像加工機能も入れたいですね!


# 画像のアップロード
class PutImage(UserLoginAuthRequestHandler):

    def post(self):
        if self.invalidateAccount():
            Common.writeUserResponseError(self, 401,u"無効セッション")
            return

        blob    =   self.request.get('blob')
        content_type = self.request.params['blob'].type

        blobHash = hashlib.md5(blob).hexdigest()
        gcsPath = Common.createImagePath(blobHash)
        Common.saveToGCS(gcsPath,blob,content_type)


        entity = ImageFile()
        entity.path = gcsPath
        entity.md5  = blobHash

        entity.put()

        res = dict(
            url = webapp2.uri_for('GetImage',_full=True,imageid=entity.key.id())
        )

        Common.writeUserResponseSuccess(self, res )


# 指定した画像を返す
class GetImage(UserLoginAuthRequestHandler):

    def get(self):
        imageid = int(self.request.get('imageid'))

        item = ImageFile.get_by_id(imageid)

        path = item.path

        gcs_file = gcs.open(path)
        gcs_stat = gcs.stat(path)

        self.response.content_type = gcs_stat.content_type
        self.response.content_type_params = None
        self.response.write(gcs_file.read())
        gcs_file.close()





app = webapp2.WSGIApplication(
                            [
                                webapp2.Route('/user/api/resource/putimage', PutImage,'PutImage'),
                                webapp2.Route('/user/api/resource/getimage', GetImage,'GetImage'),
                            ],
                            debug=Common.isDebug()
)

こんな感じでサークルアイテムの登録・編集機能がつきました。
https://github.com/nagai/freemarket/tree/20140429
次回は即売会会場を作ります。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?