i am uploading multiple image. After selecting image it is showing in a list with delete button on the side. i was successful to remove the image(file name) from the scope but i am not able to delete the specific data from the file uploader or FormData(i.e js object that stores the data uploaded).
the view looks like this
my js file
angular.module('fupApp', [])
.directive('ngFiles', ['$parse', function ($parse) {
function fn_link(scope, element, attrs) {
var onchange = $parse(attrs.ngFiles);
element.on('change', function (event) {
onchange(scope, { $files: event.target.files });
})
}
return {
link: fn_link
}
}])
.controller('fupController', function ($scope, $http) {
var formdata = new FormData();
$scope.imagesrc = [];
$scope.getTheFiles = function ($files) {
for (var i = 0; i < $files.length; i++) {
var reader = new FileReader();
reader.fileName = $files[i].name;
reader.onload = function (event) {
var image = {};
image.Name = event.target.fileName;
image.Size = (event.total / 1024).toFixed(2);
image.Src = event.target.result;
$scope.imagesrc.push(image);
$scope.$apply();
}
reader.readAsDataURL($files[i]);
}
angular.forEach($files, function (value, key) {
formdata.append(key, value);
})
}
$scope.deleteTempImage = function (idx) {
$scope.imagesrc.splice(idx, 1);
-->>>> how to delete the specific data from formdata in here??????????
alert("deleted");
}
$scope.uploadFiles = function () {
var request = {
method: 'POST',
url: '/api/FileUpload',
data: formdata,
headers: {
'Content-Type': undefined
}
};
$http(request).success(function (d) {
alert(d);
}).error(function () {
alert("Failed");
$scope.reset();
})
}
$scope.reset = function () {
angular.forEach(
angular.element("input [type='file']"),
function (inputElem) {
angular.element(inputElem).val(null);
}
);
$scope.imagesrc = [];
formdata = new FormData();
}
})
this is my view
<div ng-app="fupApp" ng-controller="fupController">
<div class="container">
<div class="panel panel-info">
<div class="panel-heading">
Photos
</div>
<div class="panel-body">
<table class="table table-hover table-boardered">
<thead>
<tr>
<td >Title</td>
<td>Image</td>
<td>Size</td>
</tr>
</thead>
<tbody>
<tr ng-repeat="image in imagesrc track by $index">
<td>{{image.Name}}</td>
<td>
<img ng-src="{{image.Src}}" title="{{image.Name}}" style="width:100px" />
</td>
<td>{{image.Size}}</td>
<td><input type="button" class="btn btn-success " ng-click="deleteTempImage($index)" value="delete" />
</td>
</tr>
</tbody>
</table>
<div class="row">
<div class="col-lg-7">
<input type="file" multiple ng-files="getTheFiles($files)"/>
</div>
<div class="col-lg-5">
<input ng-disabled="!imagesrc.length" type="button" class="btn btn-success" ng-click="uploadFiles()" value="Upload" />
<input ng-disabled="!imagesrc.length" type="button" class="btn btn-success" ng-click="reset()" value="Cancel" />
</div>
</div>
</div>
</div>
</div>
</div>
The problem here is after i press upload all the image I select gets uploaded. As you can see there is shown 6 files in the image but i have deleted two images already but as i click on upload all the image get saved including the one i deleted previously.
Will appreciate any help to prevent saving of the unwanted image.i am still learning AngularJS so please help.
Thank you.
UPDATE(SOLVED)
Well this solved my problem. i passed the file as well as the index
<input type="button" class="btn btn-success " ng-click="deleteTempImage($index,image)" value="delete" />
then i deleted the specific item in my formdata like this.
$scope.deleteTempImage = function (idx,image) {
debugger;
$scope.imagesrc.splice(idx, 1);
formdata.delete(idx, image);
alert("deleted");
}
Anyway thanks for instructing me.