首页 文章

通过网页形式python,google app engine,angularjs将图像上传到谷歌 Cloud 商店

提问于
浏览
1

First let me say

我想我已经阅读了与此主题相关的每个堆栈交换帖子 . *

What I'm trying to do:

  • 我试图允许某些用户通过我网站上的表单将图像发送到谷歌 Cloud 存储 .

  • 将该图像发送到 Cloud 存储的另一个要求是,我需要在数据存储区中创建该图像的模型,并使用它的相关属性 .

我不确定最好的办法是什么,因为..

Approaches I've read about:

有很多方法可以将图像传输到 Cloud 存储:

我读过很多相互矛盾的信息,

而且我已经阅读了这么多我无法保持原状,

然而,

I think the resolution was:

For blobstore

  • blobstore.uploadtocloudstoragething方法可能有也可能没有文件上传限制大小(不会's not the actual call or method name) 2. The blobstore method sounded like it' s将逐步淘汰?

For Jason API

“但是,客户端库包括App Engine优化, so using the REST API 可能需要额外的开发时间 . 注意:App Engine开发服务器支持 Cloud 存储客户端. It doesn't support the REST API . ”

For the client library

我不知道 . 到目前为止看起来很好 . 这是我正在考虑使用的方法:

“cloudstorage.open(filename,mode ='r',content_type = None,options = None,read_buffer_size = storage_api.ReadBuffer.DEFAULT_BUFFER_SIZE,retry_params = None)在读取模式下,(r)打开指定的 Cloud 存储对象以供读取 . 写入模式w,如果指定的文件存在,则打开它以进行覆盖(不支持附加) . 如果文件不存在,则在指定的存储桶中创建 . “

The stuff I'm using

  • Google App Engine

  • Python(用于处理程序,模型等)

  • angularjs和jquery(前端)

  • json有时候(后端)

  • GAE样板(不要问)

What I think I'm gonna do :

  • 获取用户的图片:

所以,我发现了我测试的这种形式 . 它会从您的计算机中获取文件:

<form action="<?php echo $upload_url?>" enctype="multipart/form-data"
method="post">
Files to upload: <br>    <input type="file" name="uploaded_files"    size="40">    <input type="submit" value="Send">

(不,我不能在动作中使用php垃圾 . 我从文档中的某个地方拿走它,但我测试了它,它确实抓了一个文件,不会发送它,它会很傻期待它)

  • 修改我当前的处理程序(负责创建数据存储区中图像的模型)以便使用

这个方法:

“cloudstorage.open(filename,mode ='r',content_type = None,options = None,read_buffer_size = storage_api.ReadBuffer.DEFAULT_BUFFER_SIZE,retry_params = None)在读取模式下,(r)打开指定的 Cloud 存储对象以供读取 . 写入模式w,如果指定的文件存在,则打开它以进行覆盖(不支持附加) . 如果文件不存在,则在指定的存储桶中创建 . “

My Problems so far

我不知道那个表单是如何工作的,我不知道如何从这个表单中获取正确的信息到处理程序,以及处理程序需要什么信息,所以我可以处理它,创建模型(我已经知道了)如何在数据存储中创建模型,已经这样做了),并使用以下方法将图像发送到谷歌 Cloud 存储:

“cloudstorage.open(filename,mode ='r',content_type = None,options = None,read_buffer_size = storage_api.ReadBuffer.DEFAULT_BUFFER_SIZE,retry_params = None)在读取模式下,(r)打开指定的 Cloud 存储对象以供读取 . 写入模式w,如果指定的文件存在,则打开它以进行覆盖(不支持附加) . 如果文件不存在,则在指定的存储桶中创建 . “

谁能举个例子?我找不到任何关于在表单中放置什么的相关帖子或文档,以便它抓取文件,抓取用户填写的其他表单数据,然后最终将图像发送到谷歌 Cloud 存储 .

--UPDATE--:

所以,在发布这个之后,我用Google搜索了gcs.open,这导致了这篇文章:

how to upload image to the cloud storage via app engine?

我认为就后端而言,这可以做到这一点,我确实还有一个问题 .

要重新解决这个问题:

Questions:

  • 我不知道图像名称是什么,我想使用现有图像名称,或者可能是随机图像名称 . 建议?

  • 我在哪里坚持这个:enctype =“multipart / form-data”?

  • 将编号2.弄乱我的其他表单数据?在帖子请求中我需要的信息不仅仅是这张图片

2 回答

  • 0

    您还可以使用已签名的表单直接上传到GCS . 这样您就不需要blobstore或post处理程序 . 您可以使用策略文档控制超时和对象名称 . 看我的aswer here .

  • 1

    To answer your questions:

    • 我不喜欢使用现有的,也许是随机的 . 建议?

    我认为这不重要,只要确保考虑可能的名称冲突以及接下来会发生什么 . 我认为这主要取决于您的应用程序的需求 . 您始终可以使用随机文件名,并在数据存储区中保留实际文件名,该文件名位于对 Cloud 存储项的引用旁边 .

    • 哪里做我坚持这个:enctype = "multipart/form-data"?

    Enctype是一个表单属性,因此需要在HTML中的表单元素上设置:

    <form enctype="multipart/form-data" action="/save" ... >
    
    • 将编号2.弄乱我的其他表单数据?在帖子请求中我需要的信息不仅仅是这张图片

    不,不应该 . 只需添加更多表单输入字段,它们都将与表单数据一起提交 .

相关问题