2016-02-08 6 views
0

Я хочу загрузить 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.

enter image description here

Как я могу загрузить изображения?

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 %} 
+0

Как вы пытаетесь открыть изображение? – Jeremad

+0

@Jeremad From Finder –

+0

Пожалуйста, выберите [редактировать], чтобы включить форму, которую вы используете для публикации данных. – davidism

ответ

0

Я исправил проблему. Это происходило, потому что, если я выполняю какую-либо операцию над Image, он, наконец, переместит мой указатель, поэтому, когда вы сохраните изображение, оно начнет сохранять изображение, где находится ваш указатель, который находится на последнем. Таким образом, сохраненное изображение пуст.

Теперь, чтобы исправить это, я просто перемещаю указатели в начало. Вот пример кода, что я сделал:

if img is not None and img.filename != u'': 
      img.seek(0, os.SEEK_END) 
      size = img.tell() 
      imgs = Image.open(img) 
      res = imgs.size 
      img.seek(0) 
Смежные вопросы

 Смежные вопросы