Я пытаюсь загрузить несколько изображений, но кроме первого изображения в файле, все остальные изображения становятся поврежденными во время загрузки. Я могу просматривать первое изображение без проблем, но остальное нельзя просмотреть. окна говорят We can't open this file
. Это почти похоже на расширение неизвестно.Загрузка нескольких изображений развращает всех, кроме первых - Flask
На стороне примечания, когда я смотрю детали одного из поврежденных изображений, все поля пусты, кроме как внизу, имя файла и т. Д.
# 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
никогда не изменяется после первого имени изображения. По-видимому, он не получает данные для других изображений.
Вы зацикливание над файлами, но вы всегда используете 'form.photo.data', чтобы сохранить в конце. Вместо этого используйте 'image'. – davidism
@davidism Я не уверен, где и как вы хотите, чтобы я использовал «образ» вместо этого. – Leustad
Вместо 'form.photo.data', как и любая другая часть этого блока кода. – davidism