Как отладить 0 МБ безымянных загрузок? - PullRequest
0 голосов
/ 17 ноября 2011

При просмотре в консоли администратора блогов хранилища данных видно, что многие файлы имеют размер 0:

enter image description here

Не могли бы вы прокомментировать или сказать, почему это произошло? Я думаю, что код загрузки файла у меня довольно чистый, так где же ошибка?

for upload in self.get_uploads():
    try:
        img = Image(reference=ad)
        img.primary_image = upload.key()
        img.put()
        ad.put()
    except:
        pass

Я подозреваю, что могу воссоздать эту ошибку, загрузив файл в хранилище блогов, после чего будет создан как файл, так и нулевая загрузка. Как еще вы думаете, я должен устранить эту ошибку?

Спасибо

Обновление

Я могу воспроизвести ошибку, загружая только один файл, и оставить другие поля пустыми, тогда пустые поля создадут пустые файлы хранилища данных:

<tr><td>
<div class="labelform">
    <label>{% trans %}Post a photo{% endtrans %}</label>
  </div></td><td>
  <div class="adinput">
    <input type="file" name="file" size="35" id="file" />{% trans %}Optional{% endtrans %}{{resize}}
  </div>
  </td></tr><tr><td>
  <div class="labelform">
    <label>{% trans %}Post a photo{% endtrans %}</label>
  </div></td><td>
  <div class="adinput">
    <input type="file" name="file2" size="35" id="file2" /> {% trans %}Optional{% endtrans %}
  </div></td></tr><tr><td>
<div class="labelform">
    <label>{% trans %}Post a photo{% endtrans %}</label>
  </div></td><td>
  <div class="adinput">
    <input type="file" name="file3" size="35" id="file3" /> {% trans %}Optional{% endtrans %}
  </div>
  </td></tr><tr><td>
  <div class="labelform">
    <label>{% trans %}Post a photo{% endtrans %}</label>
  </div></td><td>
    <input type="file" name="file4" size="35" id="file4" /> {% trans %}Optional{% endtrans %}
  </td></tr><tr><td>
<div class="labelform">
    <label>{% trans %}Post a photo{% endtrans %}</label></div></td><td><div class="adinput"><input type="file" name="file5" size="35" id="file5" /> {% trans %}Optional{% endtrans %}</div></td></tr><tr><td></td><td><div class="labelform"></div><div class="adinput">

<input type="submit" name="validate" value='{% trans %}Go{% endtrans %}' /></div></td></tr>

Ответы [ 2 ]

1 голос
/ 19 ноября 2011

Использование экспериментального кода Google (необходимо настроить его для нескольких файлов).

my_upload = self.request.POST['file']
my_data = my_upload.file.read()

if len(my_data) > 0:
    # Create the file
    file_name = files.blobstore.create(mime_type='application/octet')

    # Open the file and write to it
    with files.open(file_name, 'b') as f:
      f.write(my_data)

    # Finalize the file. Do this before attempting to read it.
    files.finalize(file_name)

    # Get the file's blob key
    blob_key = files.blobstore.get_blob_key(file_name)
    self.response.out.write(blob_key)
1 голос
/ 18 ноября 2011

Вы указываете несколько полей файла, поэтому хранилище данных пытается обработать несколько файлов. Это можно считать ошибкой в ​​хранилище блогов (в этом случае вы можете подать один ), но если ваш браузер отправляет пустые поля, мне неясно, каков правильный ответ.

Вы можете обойти эту проблему, удалив пустые файлы, или (лучше), используя Javascript для автоматического добавления и вычитания полей ввода файлов в соответствии с фактическим количеством файлов, которые пользователь хочет загрузить.

...