使用表单

时间:2015-05-25 22:23:31

标签: python-2.7 google-app-engine google-cloud-storage google-cloud-endpoints

我想将带有表单的图像上传到enpoints api。上传和保存到谷歌云存储似乎正在运作。

enter image description here

但是如果我点击开发者控制台中的图像,它只显示一个16x16像素的空图像,而不是原始图像。

enter image description here

我做错了什么?

<form action="https://xyz.appspot.com/_ah/api/undergogo/v1/image" 
 target="_blank" 
 enctype="multipart/form-data" 
 method="post" 
 onchange="readImage();">

  <input type="text" name="desc"/>
  <input id="fileInput" type="file" name="imgFile"/>
  <input id="fileInputBase64" type="hiden" name="img" />
  <input type="submit" value="upload">

</form>

编码到base64并将字符串保存在隐藏字段fileInputBase64中。

function el(id){return document.getElementById(id);} // Get elem by ID

function readImage() {
    if ( el("fileInput") && el("fileInput").files[0] ) {
        var FR= new FileReader();
        FR.onload = function(e) {
             el("fileInputBase64").value = e.target.result;
        };       
        FR.readAsDataURL( el("fileInput").files[0] );
    }
}

API

@endpoints.method(ImageMessage, Status,
                path='image', http_method='POST',
                name='image.upload')
def image_upload(self, request):
  my_default_retry_params = gcs.RetryParams(initial_delay=0.2,
                                      max_delay=5.0,
                                      backoff_factor=2,
                                      max_retry_period=15)

  bucket_name = os.environ.get('xyz.appspot.com',app_identity.get_default_gcs_bucket_name())
  bucket = '/' + bucket_name

  filename = bucket + '/demo-image2o.jpg'
  self.tmp_filenames_to_clean_up = []

  # write file
  gcs_file = gcs.open(filename,
                'w',
                 content_type='image/jpeg')

  gcs_file.write(request.img.decode('base64'))
  gcs_file.close()
  self.tmp_filenames_to_clean_up.append(filename)

  return Status(code=0,message=request.desc)

ImageMes​​sage类:

class ImageMessage(messages.Message):
  url     = messages.StringField(1)
  desc    = messages.StringField(2)
  img     = messages.BytesField(3)

0 个答案:

没有答案