1. 程式人生 > >Python Django AngularJs dropzone 多個上傳檔案 爬坑

Python Django AngularJs dropzone 多個上傳檔案 爬坑

最近 使用了 dropzone 的 多個 檔案 上傳的功能 ,參考網站上的說明並沒有很快實現,並且網站的後臺是 使用 Java 寫的,我需要使用的python ,所以總結教程中的幾個 問題:

3.出現的問題 :
3.1 報錯資訊 :$scope.processQueue is not a function
解決方式:$scope.processQueue();函式 寫錯了,應該是processDropzone 可以在後面對應的函式發現 processDropzone是 呼叫了 processQueue()函式 所以肯定是名稱寫錯了

/* js/fileAppControllers.js */
... fileAppControllers.controller('FileCtrl', ['scope', function ($scope) { $scope.partialDownloadLink = 'http://localhost:8080/download?filename='; $scope.filename = ''; $scope.uploadFile = function()
{
$scope.processQueue(); }; $scope.reset = function() { $scope.resetDropzone(); }; } ]);

3.2 報錯情況:demo中是可以實現多個檔案上傳的,但是把網站上js複製下來,發現最後只能是上傳最後一個
原因是 : js

檔案中多加個函式:if 函式中表示如果上傳的第二個檔案存在files[1]!=null就會刪除之前所有的檔案,只剩下最後一個!
解決方式:刪除If語句既可以

var eventHandlers = { 'addedfile': function(file) {
    scope.file = file;
     if (this.files[1]!=null) {     this.removeFile(this.files[0]);
     }
 scope.$apply(function() {
    scope.fileAdded = true;
                 );
    },
'success': function (file, response) {   }
                             };

3.4 js 中 dropzone 報錯資訊 :dropzone is undefined
原因是 在 js 中 定義一個 新的變數 dropzone 前面需要加上 var
解決方式 :var dropzone = new Dropzone(element[0], config);
ps :這個問題 我查出來花了三個小時,新手爬坑真的是好慘

3.5 報錯情況:ontroller 'carousel', required by directive 'ngTransclude', can't be found
原因是 : 未知 還需要回來補充這一段

3.6 後臺python實現:
報錯情況:the server responded with a status of 405 (Method Not Allowed)表示使用的方法是不正確的,DropZone 預設使用的post的方式傳資料
解決方式是後臺使用post接收,我用的是Viewset中的 APIView,本來我用的是 get方法,後來改成了 post,因為是 多個檔案上傳所以request.FILES.iteritems():型別是 dict,需要使用 迴圈得到每一個 檔案,程式碼如下

class PropertyUploadFileInteractiveView(APIView):
    def post(self, request, *args, **kw):
        property_id = request.GET['property_id']
        for key, value in request.FILES.iteritems():



返回的是response  
            op_result = 'success'
                    result ={'result':op_result}
                    response = Response(result, status=status.HTTP_200_OK)
                    #return response
                    #return HttpResponseRedirect("/ui-property/property_detail/%s" % property_id) 
                else:
                    op_result = 'fail'
                    result ={'result':op_result}
                    response = Response(result, status=status.HTTP_200_OK)
            。。。。。