我正在使用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