2017-12-18 151 views
1

我想上傳一個文本文件到我的django後端,但我的request.FILES始終是空的。無法獲得request.FILES django

我正在使用axios發送文件並按照django的要求將'multipart/form-data'作爲請求的內容類型。

我缺少什麼?

new Vue({ 
    el: '#app', 
    data: { 
     reqtype: '', 
     uploadedFile: '', 
    }, 
    methods: { 
     onSubmit(event) { 
      this.submitLoading = true; 
      if (! this.validateForm(this)) { 
       event.preventDefault(); 
       this.submitLoading = false; 
       return; 
      } 
      var formData = new FormData(); 
      formData.append("reqtype", this.reqtype) 
      formData.append('fileToUpload', this.uploadedFile) 
      axios.post('/sreqtool/tc/', formData, { 
       headers: { 
        'Content-Type': 'multipart/form-data' 
       } 
      }) 
     }, 
     onFileChange(e) { 
      var files = e.target.files || e.dataTransfer.files; 
      if (!files.length) 
       return; 

      var reader = new FileReader(); 
      var vm = this; 

      reader.onload = (e) => { 
       vm.uploadedFile = e.target.result; 
      }; 

      reader.readAsDataURL(files[0]); 
     } 
    }, 
} 

在網絡上請求有效載荷:

在我app.js我經由發送POST請求

------ WebKitFormBoundarymAnl54hGVTifZzwM內容處置:形狀數據; NAME = 「reqtype」

基於文件

------ WebKitFormBoundarymAnl54hGVTifZzwM內容處置:形狀數據; NAME = 「fileToUpload」

數據:text/plain的; BASE64,OTA1NTIzMzg2NQ0KOTE3NTAwMTU0Mg0KOTc3NDczNjcyNg0KMTIzNTQ2ODQ1Ng == ------ WebKitFormBoundarymAnl54hGVTifZzwM--

在我的views.py我有:

@csrf_exempt 
def index(request): 
    if request.method == 'POST': 
     DLOG.info(request.POST) 
     DLOG.info(request.FILES) 
     form = ExtractForm(request.POST, request.FILES) 

     if form.is_valid(): 
      res = QueryManager.processRequest(request.user, form.cleaned_data) 

DLOG是我的記錄器,dlog的輸出是:

[2017-12-18 16:51:06,510] INFO views index: <QueryDict: {u'fileToUpload': [u'data:text/plain;base64,OTA1NTIzMzg2NQ0KOTE3NTAwMTU0Mg0KOTc3NDczNjcyNg0KMT 
IzNTQ2ODQ1Ng=='], u'reqtype': [u'filebased']}> 
[2017-12-18 16:51:06,512] INFO views index: <MultiValueDict: {}> 
+2

什麼是JS功能的一部分?即什麼是「這個」?您可能需要從輸入元素獲取實際文件,如'this.uploadedFile.files [0]'。 –

+0

它是vue對象的一部分。我更新了代碼片段以包含vue實例。 –

+1

您正在嘗試保存base64圖像。閱讀此:https://stackoverflow.com/questions/39576174/save-base64-image-in-django-file-field – Farrukh

回答

0

它說你的我法師編碼爲base64

{u'fileToUpload': [u'data:text/plain;base64,OTA1NTIzMzg2NQ0KOTE3NTAwMT... 
0

我現在能夠讀取文件內容。

我用 stackoverflow answer

代碼更新爲從法魯克的評論鏈接:

@csrf_exempt 
def index(request): 
    if request.method == 'POST': 
     form = ExtractForm(request.POST, request.FILES) 
    if form.is_valid(): 
     res = QueryManager.processRequest(request.user, form.cleaned_data) 
     format, imgstr = data.split(';base64,') 
     ext = format.split('/')[-1] 
     data = ContentFile(base64.b64decode(imgstr), name='temp.' + ext) 
     filetext = data.read() 

FILETEXT包含我從文件中需要的字符串。