2017-02-04 3 views
-1

複数の画像をアップロードしようとしていますが、ファイルの最初の画像を除いて、アップロード中に他の画像が壊れています。私は問題なく最初の画像を見ることができますが、残りは見ることができません。窓はWe can't open this fileと言います。拡張子が不明であるように見えます。複数の画像をアップロードすると、最初の画像以外はすべて壊れます。

サイドノートでは、破損した画像の1つの詳細を見ると、すべてのフィールドは、下部を除いて空です。ファイル名などです。

# view.py 
@myVacation_blueprint.route('/logVacation', methods=['GET', 'POST']) 
@login_required 
def log_vacation(): 
form = LogVacationForm() 

if request.method == 'POST': 
    if form.validate_on_submit(): 
     try: 
      # Get the image name 
      uploaded_images = request.files.getlist('photo') 
      for image in uploaded_images: 
       filename = secure_filename(image.filename) 
       # Get the extension 
       extension = filename.split('.')[1] 
       filename = filename.split('.')[0] 
       # Concatenate filename and current time 
       filename = str(filename) + str(time.time()) 
       # Hash the filename 
       hash_file_name = bcrypt.generate_password_hash(filename).decode('utf-8') 
       # Normalize 
       filename = "".join([c if c.isalnum() else "" for c in hash_file_name]) 
       # Add the extension 
       filename = filename + '.' + str(extension) 
       # Save the file 
       directory = _user_img_folder(form) 
       print(os.path.join(directory, filename)) 
       form.photo.data.save(os.path.join(directory, filename)) 
     except Exception as e: 
      print(e) 

     return render_template('myVacation.html') 
    else: 
     filename = None 
return render_template('logVacation.html', form=form, error=error) 


# forms.py 
class LogVacationForm(FlaskForm): 
vacation_name = StringField('Vacation Name', validators=[DataRequired(), Length(min=6, max=25)]) 
location = StringField('Location', validators=[DataRequired()]) 
with_who = StringField('With_Who') 
description = TextAreaField('Description', render_kw={ 
    'class': 'vacation_description', 
    'rows': 10 
}) 
photo = FileField('Select Images', validators=[ 
    # FileRequired(), 
    FileAllowed(['jpg', 'png'], 'Images only')], 
        render_kw={'multiple': True} 
       ) 

# logVacation.html 

# many lines.... 
<form class="logVacation" enctype=multipart/form-data role="form" method="post" action="/logVacation"> 
# Some other input 
{{ form.photo(multiple="multiple") }} 
# Some other input 
<button class="btn btn-sm btn-success" value="upload" type="submit">Done</button> 
</form> 

私はここで何が欠けていますか?

注:私はちょうどview.pyに最初のイメージ名の後に変更されないform.photo.dataの値に気づいた。他の画像のデータを受信して​​いないようです。

+1

あなたがファイルをループしているが、あなたは常に最後に保存し 'form.photo.data'を使用しています。代わりに 'image'を使用してください。 – davidism

+0

@davidism私は代わりに 'image'をどこにどのように使用したいのか分かりません。 – Leustad

+0

'form.photo.data'ではなく、そのコードブロックの他の部分とまったく同じです。 – davidism

答えて

1
  • あなたがform.validate_on_submit()を使用する場合は、if request.method == 'POST'を除去することができます。

  • .save()メソッドのオブジェクトは、フォームデータ(form.photo.data)の代わりにファイルストリーム(image)です。ただ、このような

if form.validate_on_submit(): 
    for image in request.files.getlist('photo'): 
     ... 
     image.save(os.path.join(directory, filename)) 
関連する問題