Django 文件導入實現方案


Django文件導入實現方案

by:授客 QQ1033553122

 

開發環境

 

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/

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM