मैं Django Restful api + angularjs का उपयोग करता हूं। अब, मैं Django Restful api द्वारा सर्वर पर angularjs अपलोड फ़ाइल का उपयोग करने के लिए संलग्न हूं, वेब फ्रंट-एंड पर, एचटीएमएल है:

<input type="file" data-upload-file id="uploadInputFile">

कोणीयज का कोड है:

omapp.directive("uploadFile",function(httpPostFactory){
    return {
        restrict:"A",
        scope:true,
        link:function(scope,element,attr){
            element.bind('change',function(){
                var formData = new FormData();
                formData.append('file', element[0].files[0]);             
                console.log(formData.get('file'))         

    httpPostFactory('/api/uploadfile/',formData.get('file'),function (callback) {
                        console.log(callback);
                    })
                })
            }
        };

    });

omapp.factory('httpPostFactory', function ($http,$cookies) {
    return function (file, data, callback) {
                    var req = {
                         method:"POST",
                         url:file,
                         headers:{
                             'X-CSRFToken':$cookies.get('csrftoken')
                         },
                         data:{file:data}
                   }
                   $http(req)
                   .then(function successcallback(response){callback(response);})

    }
});

सब कुछ ठीक है। लेकिन Django एपीआई डेटा प्राप्त नहीं कर सकता कोड है:

 class UploadFile(APIView):
     def post(self,request,format=None):
         logger.info("file content");
         logger.info(request.data)
         return Response("upload done")

मैं डेटा कैसे प्राप्त कर सकता हूं?

0
qin peter 28 अगस्त 2017, 12:10

3 जवाब

Django बाकी कॉल में फ़ाइल अपलोड को संभालने का बेहतर तरीका, बेस 64 स्वरूपण का उपयोग करें। सामने के अंत में अपनी फ़ाइल को बेस 64 स्ट्रिंग में एन्कोड करें और django में इसे फिर से मूल फ़ाइल में डीकोड करें। नमूना कोड यहां.

0
Ravi 28 अगस्त 2017, 12:23

आपको request.FILES . से प्राप्त करने की आवश्यकता है

def post(self,request,format=None):
     file_data = request.FILES['file']
     return Response("upload done")
0
Mistalis 28 अगस्त 2017, 12:28
जब मैं "request.FILES['file']" का उपयोग करता हूं, तो एक त्रुटि पकड़ी गई: angular.js: 14727 संभावित रूप से अस्वीकार्य अस्वीकृति ...
 – 
qin peter
28 अगस्त 2017, 12:26
अप्रतिबंधित अस्वीकृति, यह 500 कुंजी त्रुटि हो सकती है। अपने ब्राउज़र कंसोल की जाँच करें, आपके अनुरोध डेटा में फ़ाइल सामग्री है,
 – 
Robert
28 अगस्त 2017, 12:31
मुझे एक नई त्रुटि मिली: MultiValueDictKeyError /api/uploadfile/ "'file'" पर
 – 
qin peter
28 अगस्त 2017, 12:40
अपने नवीनतम कोड चैन पोस्ट कर सकते हैं इस त्रुटि को प्राप्त करें MultiValueDictKeyError /api/uploadfile/ "'file'" पर
 – 
Robert
28 अगस्त 2017, 12:43

मुझे anwser मिला: एचटीएमएल है:

<input type="file" data-upload-file id="uploadInputFile">

कोणीयज है:

omapp.directive("uploadFile",function(httpPostFactory){
    return {
        restrict:"A",
        scope:true,
        link:function(scope,element,attr){
            element.bind('change',function(){
                var formData = new FormData();
                formData.append('file', element[0].files[0]);             
                console.log(formData.get('file'))         

    httpPostFactory('/api/uploadfile/',formData.get('file'),function (callback) {
                        console.log(callback);
                    })
                })
            }
        };

    });

omapp.factory('httpPostFactory', function ($http,$cookies) {
    return function (file, data, callback) {
                    var req = {
                         method:"POST",
                         url:file,
                         headers:{
                             'X-CSRFToken':$cookies.get('csrftoken'),
                              Content-Type': undefined //add this
                         },
                         data:{file:data}
                   }
                   $http(req)
                   .then(function successcallback(response){callback(response);})

    }
});

आराम से एपीआई:

class UploadFile(APIView):
     def post(self,request,format=None):
         logger.info("read file ");
         up_file = request.FILES['file']
         logger.info(up_file)   
0
qin peter 28 अगस्त 2017, 13:37