我目前正在嘗試上傳一些文件使用Django和它似乎是工作的大部分。我至少能夠看到文件被添加到Django管理面板中的特定模型中,但是我無法打開它。此外,每當我試圖獲取文件的URL時,我都會被轉發到Django錯誤頁面,并出現一個很好的錯誤,即[Errno 2] No such file or directory: 'media/some_file.csv'
這是我的文件模型:
class File(models.Model):
challenge = models.ForeignKey(Challenge, on_delete=models.CASCADE, default="")
file = models.FileField(default="", upload_to="media/")
def __str__(self):
return self.challenge.challenge_id
Settings.py :
STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'server', 'static'),
os.path.join(BASE_DIR, '..', 'media'),
)
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = 'media/'
上傳功能:
def uploadChallengeFile(request):
latestChallenge = Challenge.objects.last()
for file in request.FILES.items():
file_model = File(challenge=latestChallenge, file=file[0])
file_model.save()
data = {"data": [True]}
return JsonResponse(data, safe=False)
下載功能:
def downloadFile(request, challenge_id):
challenge = Challenge.objects.filter(challenge_id=challenge_id)
filename = File.objects.filter(challenge=challenge).values("file")[0]["file"]
content = open(File.objects.get(challenge=challenge).file.url).read()
response = HttpResponse(content, content_type='text/csv')
response['Content-Disposition'] = 'attachment; filename=%s' % filename
return response
urls.py :
url(r'^api/start/download/(?P<challenge_id>[\w.@+-]+)/$', views.backendServices.downloadFile, name="download")
Django似乎正在保存文件的實例,但實際上并沒有存儲它。我需要配置nginx.conf
來服務/media
目錄中的文件還是做其他事情?任何幫助都將不勝感激。
Thanks
通常,您必須配置nginx以代理將請求傳遞到media/和static/到您的django實例:
下面假設您的django服務可以在http://django:8000,但如果您沒有使用docker(并且它沒有命名為django),則更可能是這樣http://localhost:8000
另外,確保在調試模式下運行時(通常是本地開發人員)設置URL路由,以便django處理它們