0

i am new angularjs, i m posting successfully multiple parameters in http.post but when i try to add a file in that parameter django returns Invalid boundary in multipart: None from web service which is django based, browsable api page work fine so there is nothing wrong on web service side on localhost.

my html code is

<form name="myform" ng-controller="addEventController">
<b>Title: </b><input type="text" ng-model="eventtitle" style="margin-bottom: 10px;"/><br/>
<b>Banner: </b><input type="file" id="files" name="file" /><div id="progress_bar"><div class="percent">0%</div></div>
<b>Description: </b><input type="text" ng-model="eventdescription" style="margin-bottom: 10px;"/><br/>


<input type="submit" value="Submit Form" ng-click="AddThisEvent()" style="margin-top: 10px; margin-bottom: 10px; margin-left: 35px;"/>
<h2 style="color: green;">{{OKans}}</h2><h2 style="color: red;">{{NAans}}</h2>    
<b>Status: </b> {{res.statusText}}<br>          

my angularjs controller code is

eventsApp.controller('addEventController', function($scope, $http) {

            var reader;
            var progress = document.querySelector('.percent');
            function errorHandler(evt) {
                switch(evt.target.error.code) {
                    case evt.target.error.NOT_FOUND_ERR:
                        alert('File Not Found!');
                        break;
                    case evt.target.error.NOT_READABLE_ERR:
                        alert('File is not readable');
                        break;
                    case evt.target.error.ABORT_ERR:
                        break; // noop
                    default:
                        alert('An error occurred reading this file.');
                };
            }
            function updateProgress(evt) {
                // evt is an ProgressEvent.
                if (evt.lengthComputable) {
                    var percentLoaded = Math.round((evt.loaded / evt.total) * 100);
                    // Increase the progress bar length.
                    if (percentLoaded < 100) {
                        progress.style.width = percentLoaded + '%';
                        progress.textContent = percentLoaded + '%';
                    }
                }
            }
            function handleFileSelect(evt) {
                // Reset progress indicator on new file selection.
                progress.style.width = '0%';
                progress.textContent = '0%';
                reader = new FileReader();
                reader.onerror = errorHandler;
                reader.onprogress = updateProgress;
                reader.onabort = function(e) {
                    alert('File read cancelled');
                };
                reader.onloadstart = function(e) {
                    document.getElementById('progress_bar').className = 'loading';
                };
                reader.onload = function(e) {
                    // Ensure that the progress bar displays 100% at the end.
                    progress.style.width = '100%';
                    progress.textContent = '100%';
                    setTimeout("document.getElementById('progress_bar').className='';", 2000);
                    //$scope.eventbanner = { filename: evt.target.files[0].name, data: evt.target.files[0] }
                    $scope.eventbanner = evt.target.files[0];
                    //$scope.jsonFILES = ("file", $scope.eventbanner)
                }
                // Read in the image file as a binary string.
                reader.readAsDataURL(evt.target.files[0]);
                console.log(reader);
            }
            document.getElementById('files').addEventListener('change', handleFileSelect, false);

            $scope.AddThisEvent = function() {
                $scope.answer = 'logging . . . ';
                $scope.OKans = '';
                $scope.NAans = '';

                $scope.jsonData = { 
                                event_title: $scope.eventtitle,
                                event_banner_pic: $scope.eventbanner,
                                event_desc: $scope.eventdescription, 
                } 

                $http.post( '/organiser/events/', $scope.jsonData, { headers: {'Content-Type': 'multipart/form-data' }  }
                ).then(function(res){
                        $scope.res = res
                    }, function(error) {
                        $scope.res = error
                    });         
        }   
});

Thanks in advance.

1 Answer 1

0

Answer at Angularjs $http post file and form data helped me and remove following code

        var reader;
        var progress = document.querySelector('.percent');
        function errorHandler(evt) {
            switch(evt.target.error.code) {
                case evt.target.error.NOT_FOUND_ERR:
                    alert('File Not Found!');
                    break;
                case evt.target.error.NOT_READABLE_ERR:
                    alert('File is not readable');
                    break;
                case evt.target.error.ABORT_ERR:
                    break; // noop
                default:
                    alert('An error occurred reading this file.');
            };
        }
        function updateProgress(evt) {
            // evt is an ProgressEvent.
            if (evt.lengthComputable) {
                var percentLoaded = Math.round((evt.loaded / evt.total) * 100);
                // Increase the progress bar length.
                if (percentLoaded < 100) {
                    progress.style.width = percentLoaded + '%';
                    progress.textContent = percentLoaded + '%';
                }
            }
        }
        function handleFileSelect(evt) {
            // Reset progress indicator on new file selection.
            progress.style.width = '0%';
            progress.textContent = '0%';
            reader = new FileReader();
            reader.onerror = errorHandler;
            reader.onprogress = updateProgress;
            reader.onabort = function(e) {
                alert('File read cancelled');
            };
            reader.onloadstart = function(e) {
                document.getElementById('progress_bar').className = 'loading';
            };
            reader.onload = function(e) {
                // Ensure that the progress bar displays 100% at the end.
                progress.style.width = '100%';
                progress.textContent = '100%';
                setTimeout("document.getElementById('progress_bar').className='';", 2000);
                //$scope.eventbanner = { filename: evt.target.files[0].name, data: evt.target.files[0] }
                $scope.eventbanner = evt.target.files[0];
                //$scope.jsonFILES = ("file", $scope.eventbanner)
            }
            // Read in the image file as a binary string.
            reader.readAsDataURL(evt.target.files[0]);
            console.log(reader);
        }
        document.getElementById('files').addEventListener('change', handleFileSelect, false);
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.