Django文件導入實現方案
by:授客 QQ:1033553122
開發環境
Win 10
Python 3.5.4
Django-2.0.13.tar.gz
官方下載地址:
https://www.djangoproject.com/download/2.0.13/tarball/
vue 2.5.2
djangorestframework-3.9.4
下載地址:
https://github.com/encode/django-rest-framework
實現思路
1、 上傳文件
2、 獲取上傳的文件,本地打開文件,解析數據,處理
view核心代碼
def post(self, request, format=None): result = {} try: request.upload_handlers = [TemporaryFileUploadHandler()] files = request.FILES file = files.get('file') if not file: result['msg'] = '上傳失敗,未獲取到文件' result['success'] = False return Response(result, status.HTTP_400_BAD_REQUEST) temp_file_path = file.temporary_file_path() temp_result = {'msg':'導入成功', 'success':True, 'status_code':status.HTTP_200_OK} return Response(result, status_code) except Exception as e: result['msg'] = '%s' % e result['success'] = False return Response(result, status.HTTP_500_INTERNAL_SERVER_ERROR)
說明:
1、關於更多文件上傳相關資料,參考文檔“Django實現文件上傳下載API.docx”
2、TemporaryUploadedFile和InMemoryUploadedFile都是UploadedFile的子類,除了擁有父類的方法之外,TemporaryUploadedFile還擁有以下方法:
TemporaryUploadedFile.temporary_file_path(),該函數返回被上傳文件的全路徑,可以通過該方法獲取上傳的文件。
InMemoryUploadedFile,則表示上傳后被加載到內存的文件
內置上傳處理器
MemoryFileUploadHandler和TemporaryFileUploadHandler類為django提供了默認的上傳處理行為:被上傳的小文件加載到內存,大文件保存到磁盤。兩者位於django.core.files.uploadhandler
如上,可以在運行中更改上傳處理器:可以通過修改request.upload_handlers,為每個請求重新定義上傳處理器。如果想要完全替換上傳處理器,你可以為upload_handlers賦值一個新的列表:
request.upload_handlers = [TemporaryFileUploadHandler()]
以此類推,如果只是想增加一個處理器,並且最優先執行該處理器,我們可以利用list的insert方法,把處理器插入列表中即可,形如request.upload_handlers.insert(index, YourUploadHandler(request))
注意:只可以在訪問request.POST或者request.FILES之前修改上傳處理器,否則可能報錯。
參考鏈接
https://docs.djangoproject.com/zh-hans/2.0/ref/files/uploads/