2012-06-20 5 views
0

Chrome загружает zip-файл как «download.zip», firefox загружает его как «IEtEk_sk.zip.part», а Internet Explorer даже не предлагает его сохранить, он пытается открыть исходный контент в другом окно. Почему загрузка не сохраняется как «dbs_custom_library.zip» во всех браузерах или даже вообще не загружается в IE?django не сохраняет имя файла

HTML форма

<form action="/django/builder/buildit/" method="POST"> 
<input type="checkbox" name="list" value="val1" checked/> 
<input type="checkbox" name="list" value="val2" checked/> 
<input type="checkbox" name="list" value="thisispersian" checked/> 
<input type="submit" value="Submit!" /> 
</form> 

views.py

def zipit (file_paths): 
    buffer= StringIO.StringIO() 
    z= zipfile.ZipFile(buffer, "w") 
    for p in file_paths: 
    if os.path.isdir(p): 
     for dir, subdirs, files in os.walk(p): 
     for f in files: 
      filename = os.path.join(dir, f) 
      z.write(filename, arcname = filename[31:]) 
    else: 
     z.write(p, arcname = p[31:]) 
    z.close() 
    buffer.seek(0) 
    return buffer.getvalue() 

def persian (mylist): 
    files = [] 
    if 'val1' in mylist: 
    files.append('/home/dbs/public_html/download/Persian/Books/val1.html') 
    if 'val2' in mylist: 
    files.append('/home/dbs/public_html/download/Persian/Books/val2.html') 
    return files 

def main(request): 
    if request.method == 'POST': 
    mylist = request.POST.getlist('list') 
    if 'thisispersian' in mylist: 
     files = persian(mylist) 
    zipped = zipit(files) 
    zipped['Content-Disposition'] = 'attachment; filename=dbs_custom_library.zip' 
    return HttpResponse(zipped, mimetype="application/x-zip-compressed") 
    else: 
    return http.HttpResponseForbidden() 
+0

Документ W3C, описывающий Content-Disposition (RFC 2616), по-видимому, требует двойных кавычек вокруг имени файла. – geoffspear

+0

Я только что изменил строку, о которой вы говорили, в этом 'zipped ['Content-Disposition'] = 'attachment; filename = "dbs_custom_library.zip" ''с тем же результатом – user1459482

ответ

2

Вы упаковывания HttpResponse в HttpResponse. Не делай этого.

+0

' zipit() 'должен, вероятно, возвращать buffer.getvalue()' вместо – Kimvais

+0

Я получаю эту ошибку '' str' объект не поддерживает присвоение позиции' – user1459482

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