Cloudinary文件上载会抛出无效的上传URL

时间:2014-01-12 08:56:47

标签: python heroku flask cloudinary

我正在使用Flask在heroku上运行一个应用程序,并且一直在尝试使用Cloudinary插件来使我的图像管理更容易。奇怪的是,api允许某些图像文件无故障通过但其他文件引发“无效的上传URL”错误。

以下是我在routes.py中的代码:

@app.route("/cloudinary", methods=['GET', 'POST'])
@login_required
def upload():

if 'email' not in session:
    return redirect(url_for('login'))

user = User.query.filter_by(email = session['email']).first()

# Allows user to upload file into static folder
form = UploadForm()

if request.method == 'POST':

    if form.validate() == False:
        flash('All fields are required.')
        return render_template('upload.html', form=form, user = user)


    else: 
        file = request.files.get('photo') 
        if file:
            if user.usertype != 'Artist' and form.checkbox.data == False:
                flash('Sorry, only registered Artists can post pictures.')
                return render_template('upload.html', form=form, user = user)
            else:

                newpic = Picture(form.name.data, None, form.caption.data, user.id)
                #json_result = cloudinary.upload_image(file)
                #url = json_result.get('url')

                newpic.userid = user.id
                newpic.name = form.name.data
                json_result = cloudinary.upload_image(request.files['photo'], newpic.id)
                url = json_result.get('url')

                if form.checkbox.data == True:
                    user.profilepic = url
                    db.session.commit()

                newpic.filename = url
                newpic.caption = form.caption.data
                db.session.add(newpic)
                db.session.commit()
                return render_template('upload.html', form = form, success=True, user = user)

elif request.method == 'GET':
    filename = None
    return render_template('upload.html', form=form, filename=filename, user = user)

这是models.py中的cloudinary类:

class Cloudinary(object):
  def __init__(self, app):
    config = app.config['CLOUDINARY_URL'].split('://')[1]
    config = config.replace("@", ":")
    self.api_key, self.api_secret, self.name = config.split(":")

  def upload_image(self, image, id):
    keys = {'public_id': id}
    res = uploader.call_api(
    "upload",
    uploader.build_upload_params(**keys),
    api_key=self.api_key,
    api_secret=self.api_secret,
    cloud_name=self.name,
    file=image.stream,
    )
    return res

这是我从Heroku那里得到的500错误的日志:

2014-01-12T09:09:23.700352+00:00 heroku[router]: at=info method=POST path=/cloudinary host=outlet-beta.herokuapp.com fwd="207.38.157.121" dyno=web.1 connect=1ms service=270ms status=500 bytes=291

0 个答案:

没有答案