Google App Engine - Error uploading file to blobstore from Python code

后端 未结 1 1955
夕颜
夕颜 2021-01-03 03:19

I am working on an app to process emails hitting my mailbox. I have modified my mail settings to forward incoming mails to myapp. The mails reaching

相关标签:
1条回答
  • 2021-01-03 04:01

    I think this code sample will solve you problem. You probably need to use only encode_multipart_formdata function from this code. And do not forget to set properly content type.

    class BlobstoreUpload(blobstore_handlers.BlobstoreUploadHandler):
      def post(self):
        upload_files = self.get_uploads('file')
        blob_info = upload_files[0]
        return self.response.write(blob_info.key())
    
      @classmethod
      def encode_multipart_formdata(cls, fields, files, mimetype='image/png'):
        """
        Args:
          fields: A sequence of (name, value) elements for regular form fields.
          files: A sequence of (name, filename, value) elements for data to be
            uploaded as files.
    
        Returns:
          A sequence of (content_type, body) ready for urlfetch.
        """
        boundary = 'paLp12Buasdasd40tcxAp97curasdaSt40bqweastfarcUNIQUE_STRING'
        crlf = '\r\n'
        line = []
        for (key, value) in fields:
          line.append('--' + boundary)
          line.append('Content-Disposition: form-data; name="%s"' % key)
          line.append('')
          line.append(value)
        for (key, filename, value) in files:
          line.append('--' + boundary)
          line.append('Content-Disposition: form-data; name="%s"; filename="%s"' % (key, filename))
          line.append('Content-Type: %s' % mimetype)
          line.append('')
          line.append(value)
        line.append('--%s--' % boundary)
        line.append('')
        body = crlf.join(line)
        content_type = 'multipart/form-data; boundary=%s' % boundary
        return content_type, body
    
    
    class UserProfile(webapp2.RequestHandler):
      def post(self):
        picture = self.request.POST.get('picture')
    
        # Write new picture to blob
        content_type, body = BlobstoreUpload.encode_multipart_formdata(
          [], [('file', name, image)])
        response = urlfetch.fetch(
          url=blobstore.create_upload_url(self.uri_for('blobstore-upload')),
          payload=body,
          method=urlfetch.POST,
          headers={'Content-Type': content_type},
          deadline=30
        )
        blob_key = response.content
    
    0 讨论(0)
提交回复
热议问题