Я хочу загрузить 2 изображения из запросов. Я создаю функцию, которая принимает параметр request.files
в качестве параметра и сохраняет оба изображения.Файл не может быть открыт, потому что он пуст
Функция:
def store_offer_images(files, **service_response):
"""
Stores the Images
"""
create_diretory_if_not_exist()
lrg_img, sml_img = files.get('detail_image'), files.get('listing_image')
lrg_img_filename = service_response.get('content').get('offerId') + ".png"
sml_img_filename = service_response.get('content').get('offerId') + ".png"
sml_img.save(
os.path.join(config.NORMAL_FILE_UPLOAD_FOLDER, sml_img_filename))
lrg_img.save(
os.path.join(config.LARGE_FILE_UPLOAD_FOLDER, lrg_img_filename))
Когда я пытаюсь сохранить изображения. Это экономит должным образом. files
- request.files
и service_response
- kwargs
.
Когда я хочу, чтобы открыть файл в Finder (OS GUI Window), то я получил сообщение:
The file “b516f2dca72e4f559c3a72a1f48727a9.png” could not be opened because it is empty.
Как я могу загрузить изображения?
Edit:
Когда я смотрю файлы в PDB, вот ответ:
(pdb) files.get('detail_image')
(pdb) <FileStorage: u'python-640x444.png' ('image/png')>
модель, которая моделирует мои данные запроса:
import datetime
from app_config import AppConfig
class Offer(object):
"""
Offer Details
"""
def __init__(self, form):
self.REST_API_TIME_FORMAT = AppConfig().REST_API_TIME_FORMAT
self.title = form.get('title')
self.start_date = form.get('startsOn') + ' 00:00'
self.end_date = form.get('endsOn') + ' 23:59'
self.short_description = form.get('shortDescription')
self.long_description = form.get('longDescription')
self.outlets = form.getlist('outlets')
self.offer_value = form.get('offerValue')
self.offer_old_value = form.get('oldValue')
self.currency = form.get('currency')
def add_offer_body(self):
"""
Return the request body in json format
"""
outlets_list = []
for i in self.outlets:
outlets_list.append({'code': i})
starts_on_date = datetime.datetime.strptime(
self.start_date, '%d/%m/%Y %H:%M')
ends_on_date = datetime.datetime.strptime(
self.end_date, '%d/%m/%Y %H:%M')
body = {
"outlets": outlets_list,
"title": self.title,
"shortDescription": self.short_description,
"longDescription": self.long_description,
"endsOn": ends_on_date.strftime(self.REST_API_TIME_FORMAT),
"startsOn": starts_on_date.strftime(self.REST_API_TIME_FORMAT),
"isActive": "true",
}
if self.offer_value is not u'':
body['offerValue'] = {
"value": self.offer_value,
"currency": self.currency
}
if self.offer_old_value is not u'':
body["offerOldValue"] = {
"value": self.offer_old_value,
"currency": self.currency
}
return body
def __repr__(self):
return self.title
views.py
является:
@portal.route('/admin/offers/add', methods=['POST'])
def add_offer():
"""
Return status of added offer
"""
offer = Offer(request.form)
if controller.valid_content(request.files):
service_response = controller.add_offer(offer)
if 'errors' in service_response:
message = str(service_response.get('errors')[0].get('message'))
flash("Adding Offer Failed.!! " + message)
current_app.logger.error(
'Offer adding failed with details' + str(request.form))
return redirect(url_for('portal.list_running_offers'))
else:
controller.store_offer_images(request.files, **service_response)
current_app.logger.info('User added a offer successfully.')
flash("Offer added successfully..!!")
return redirect(url_for('portal.list_running_offers'))
else:
flash("Please upload all Images of mentioned Resolution.!!")
return render_template(
'addoffer.jinja', body=offer.add_offer_body(), help=help_messages)
Код HTML:
{% extends "base.jinja" %}
{% block script %}
<script type="text/javascript" src="static/js/addOffer.js"></script>
<script type="text/javascript" src="static/js/bootstrap-datepicker.min.js"></script>
<link href="static/css/datepicker.css" rel="stylesheet">
{% endblock %}
{% block title %}
Add Offer
{% endblock %}
{% block content %}
<legend><h1>
Add Offer
</h1></legend>
<br>
<div class="row">
<div class="col-md-1"></div>
<div class="col-md-10">
<form id="offerForm"enctype="multipart/form-data" class="form-horizontal" action="{{ url_for('portal.add_offer') }}" data-toggle="validator" role="form" method="post">
<div class="form-group">
<label class="control-label col-xs-3" for="file">OFFER LISTING IMAGE *</label>
<div class="col-xs-7 input-group">
<input id="image" type="file" class="form-control" name="listing_image" accept="image/x-png" data-error="{{help.listing_image}}" required>
<span class="help-block with-errors">{{help.listing_image}}</span>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-3" for="file">OFFER DETAIL IMAGE *</label>
<div class="col-xs-7 input-group">
<input id="image" type="file" class="form-control" name="detail_image" accept="image/x-png"
data-error="{{help.detail_image}}" required>
<span class="help-block with-errors">{{help.detail_image}}</span>
</div>
</div>
</form>
</div>
<div class="col-md-1"></div></div>
</div>
{% endblock %}
Как вы пытаетесь открыть изображение? – Jeremad
@Jeremad From Finder –
Пожалуйста, выберите [редактировать], чтобы включить форму, которую вы используете для публикации данных. – davidism