필자는 AngularJS 프로젝트에 악명 높은 bluimp jQuery 파일 업 로더를 통합하기 위해 following 자습서를 따랐습니다.AngularJS로 파일 업로드 및 다른 양식의 성공 콜백에서 bluimp
몇 가지 연구를 한 후 옵션 배열에서 jquery.fileuploader.js 파일과 함께, autoUpload라는 옵션이 있는데, true로 설정하면 자동으로 파일을 업로드합니다. 나는 그것 (false, undefined)을 사용하지 않으려 고 시도했지만, 빨리 폼이 제출되지 않아서 업로드가 전혀 작동하지 않는다는 것을 알았다.
업로드를 수동으로 실행하거나 다른 콜백 내에서 또는 클릭 이벤트를 통해 트리거해야합니다. 할 수 있습니까?.
코드 :
app.directive("fileupload", function() {
return {
restrict: "A",
scope: {
done: "&",
progress: "&",
fail: "&",
uploadurl: "=",
customdata: "&"
},
link: function(scope, elem, attrs) {
var uploadOptions;
uploadOptions = {
url: scope.uploadurl,
dataType: "json"
};
if (scope.done) {
uploadOptions.done = function(e, data) {
return scope.$apply(function() {
return scope.done({
e: e,
data: data
});
});
};
}
if (scope.fail) {
uploadOptions.fail = function(e, data) {
return scope.$apply(function() {
return scope.fail({
e: e,
data: data
});
});
};
}
if (scope.progress) {
uploadOptions.progress = function(e, data) {
return scope.$apply(function() {
return scope.progress({
e: e,
data: data
});
});
};
}
return elem.fileupload(uploadOptions).bind("fileuploadsubmit", function(e, data) {
return data.formData = {
JSON.stringify(scope.customdata())
};
});
}
};
});
app.service('uploadService', function(authService) {
var initializeFn, processFn;
initializeFn = function(e, data, process) {
var upload;
return upload = {
message: '',
uploadurl: authService.getBaseUrl() + '/applications/',
status: false
};
};
processFn = function(e, data, process) {
var file, upload;
upload = {};
upload.successData = [];
upload.status = true;
upload.error = false;
if (process === 'done') {
upload.message = data.result.result;
console.log(data);
file = data.result.resume;
upload.successData = {
// name: file.name,
// fullUrl: file.url,
// thumbUrl: file.thumbnail_url
};
} else if (process === 'progress') {
upload.message = 'Uploading....!!!';
} else {
upload.error = true;
upload.message = 'Please try again';
console.log(e, data);
}
return upload;
};
return {
process: processFn,
initialize: initializeFn
};
});
app.controller('applyCtrl', function($scope, $routeParams, uploadService){
$scope.model.formData = {};
$scope.model.formData.job = $routeParams.jobId;
$scope.uploadLayer = function(e, data, process) {
return $scope.uploadReturn = uploadService.process(e, data, process);
};
$scope.customData = function() {
return $scope.model.formData;
};
return $scope.uploadReturn = uploadService.initialize();
});
보기 :
<form class="applyForm" ng-submit="uploadLayer(e, data, 'progress')">
<fieldset>
<div class="formLine">
<div class="wideFieldContainer">
<input id="testUpload" type="file" fileupload customdata="customData()" name="resume" uploadurl="uploadReturn.uploadurl" done="uploadLayer(e, data, 'done')" fail="uploadLayer(e, data, 'fail')" progress="uploadLayer(e, data, 'progress')" />
</div>
</div>
</fieldset>
</form>
스크립트로드 순서 :
...
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script src="lib/angular/angular.js"></script>
<script src="lib/angular/angular-resource.js"></script>
<script src="js/app.js"></script>
<script src="js/services.js"></script>
<script src="js/controllers.js"></script>
<script src="js/filters.js"></script>
<script src="js/directives.js"></script>
<script src="lib/bluimp/js/vendor/jquery.ui.widget.js"></script>
<script src="lib/bluimp/js/jquery.piframe-transport.js"></script>
<script src="lib/bluimp/js/jquery.fileupload.js"></script>
</body>
</html>
이 제출 방법을 현재 코드에 통합 할 수 있습니까? –
글쎄, 내 현존하는 코드로는 더 이상 선택의 여지가 없지만,이 질문을하기 전에 나 자신이 알아 낸 업 로더의 더 무거운 풀 버전을 사용하는 것은 효과가 없다. 잠시 시간을내어 질문에 포함 된 링크의 코드와 지침을 준수하십시오. 시간과 도움을 주셔서 감사합니다 –
jQuery File Upload의 AngularJS 버전에는 예제를 실행하는 데 필요한 모든 지시문과 컨트롤러가 포함되어 있습니다. 실행하려고 할 때 오류가 표시됩니까? 우리가 편집 할 수 있도록 plnkr을 만들 수 있습니까? 감사! – jvandemo