2017-05-27 20 views
-3

這裏是新的,我想從媒體文件中提供我的下載文件,並通過管理員上傳文件。我試圖做的東西,我得到這個錯誤在/ 1參數處的TypeError應該是字符串,字節或整數,而不是下載

類型錯誤在/ 1

參數應該是字符串,字節或整數,而不是下載

下面

是我的代碼。

view.py

def download(request, download_id): 
     downloading = Download.objects.get(pk=download_id) 
     if os.path.exists(downloading): 
     with open(downloading, 'rb') as fh: 
      response = HttpResponse(fh.read(), content_type="text/pdf") 
      response['Content-Disposition'] = 'inline; filename=' + os.path.basename(downloading) 
      response['Content-Length'] = os.path.getsize(downloading) 
      return response 
     pdf.closed 
    raise Http404 

url.py

url(r'^(?P<download_id>\d+)$', views.download, name='download'), 

HTML鏈接

<a href="{% url 'peruse:download' download.id %}" class="btn btn-generic btn-sm" role="button">DOWNLOAD</a> 

model.py

class Download(models.Model): 
     pdf_name = models.CharField(max_length=500, blank=False) 
     pdf_file = models.FileField(upload_to='Downloads/%d-%m-%Y/', blank = False,) 
     created_at = models.DateTimeField(auto_now_add = True) 
     updated_at = models.DateTimeField(auto_now = True) 
     is_visible = models.BooleanField(default = True) 

     def __str__(self): 
      return self.pdf_name 

和這個視圖處理上傳。

def upload(request): 
     uploading = Download.objects.filter(is_visible = True) 
     context = { 'uploading' : uploading } 
     fillAuthContext(request, context) 
     return render(request, 'library/resources.html', context) 

請幫我瞭解如何使這項工作。謝謝

+0

請格式化您的代碼和整個帖子它真的很難閱讀 – knurzl

+0

格式化謝謝 –

+0

正試圖與我在這裏看到的工作https://stackoverflow.com/questions/36392510/ Django的下載一個文件。請隨時糾正您發現的任何錯誤。我用django不太好。謝謝 –

回答

0

謝謝大家的幫助。我能夠想出一些與你的想法一致的東西。

view.py

def download(request, download_id): 
     downloading = Download.objects.get(pk=download_id) 
     path = downloading.pdf_file.name 
     file_path = os.path.join(settings.MEDIA_ROOT, path) 
     if os.path.exists(file_path): 
      with open(file_path, 'rb') as pdf: 
       response = HttpResponse(pdf.read(), content_type="text/pdf") 
       response['Content-Disposition'] = 'inline; filename=' + os.path.basename(file_path) 
       response['Content-Length'] = os.path.getsize(file_path) 
       return response 
      pdf.closed 
     raise Http404 

其現在的工作。用戶現在可以下載文件

+0

你的想法和我的答案完全一樣,只是我不確定你的'Download'文件夾在你的'MDEIA_ROOT'中,我認爲它在你的項目根文件夾中。 –

+0

是的。一樣的。這就是我如何正確指導它的想法。非常感謝 –

+0

如果它有幫助,並且它是正確的解決方案,那麼將其標記爲接受答案,人們需要數小時才能解決問題,幫助指導正確的方式,請尊重他們投入的時間和精力。 :) –

1

你必須傳遞參數作爲download file path字符串,而不是Download對象,只是改變你的download功能:

def download(request, download_id): 
    downloading = Download.objects.get(pk=download_id) 
    file_path = downloading.pdf_file.name 
    if os.path.exists(file_path): 
     with open(file_path, 'rb') as fh: 
      response = HttpResponse(fh.read(), content_type="text/pdf") 
      response['Content-Disposition'] = 'inline; filename=' + os.path.basename(file_path) 
      response['Content-Length'] = os.path.getsize(file_path) 
      return response 
     pdf.closed 
    raise Http404 

我已經驗證你的代碼,這會爲你工作:

http://127.0.0.1:8000/peruse/download/1download_id=1這裏)會給你的第一個文件:

enter image description here

更新:

確保你的根yourproject/urls.py是這樣的:

from django.conf.urls import url,include 
from django.contrib import admin 

urlpatterns = [ 
    url(r'^peruse/',include('peruse.urls')), 
    url(r'^admin/', admin.site.urls), 
] 

而且yourproject/peruse/urls.py是這樣的:

from django.conf.urls import url 

from . import views 

urlpatterns = [ 
    url(r'^download/(?P<download_id>\d+)$', views.download, name='download'), 
] 

並確保你已經上傳的文件。

+0

謝謝微小,但它提出了一個錯誤;找不到網頁(404) 請求方法:\t GET 請求URL:\t http://127.0.0.1:8000/1 提出者:\t peruse.views.download –

+0

我認爲有一些問題,你'urls' ,檢查我更新的答案。 –

相關問題