Showing posts with label AngularJS. Show all posts
Showing posts with label AngularJS. Show all posts

Friday, 18 December 2015

Get specific JSON object by id from JSON array in AngularJS

I have a JSON file containing some data I d like to access on my AngularJS website. Now what I want is to get only one object from the array. So I d like for example Item with id 1.
The data looks like this:
{ "results": [
    {
        "id": 1,
        "name": "Test"
    },
    {
        "id": 2,
        "name": "Beispiel"
    },
    {
        "id": 3,
        "name": "Sample"
    }
] }
I d like to load the data with AngularJS $http functionality like this:
$http.get("data/SampleData.json");
which is working. But how can I now get a specific data object (by id) from the array I get from $http.get ?
Answer
$filter('filter')(foo.results, {id: 1})[0];
A use case example:
app.controller('FooCtrl', ['$filter', function($filter) {
    var foo = { "results": [
        {
            "id": 12,
            "name": "Test"
        },
        {
            "id": 2,
            "name": "Beispiel"
        },
        {
            "id": 3,
            "name": "Sample"
        }
    ] };

    // We filter the array by id, the result is an array
    // so we select the element 0

    single_object = $filter('filter')(foo.results, function (d) {return d.id === 2;})[0];

    // If you want to see the result, just check the log
    console.log(single_object);
}]);
http://stackoverflow.com/questions/19590063/get-specific-json-object-by-id-from-json-array-in-angularjs

Thursday, 14 May 2015

AngularJS with save file using fileupload control

For save file in binary

[AllowAnonymous]
        public async System.Threading.Tasks.Task<HttpResponseMessage> PostMemberImage(int customerID, int memberID)
        {
            AjaxResult res = new AjaxResult();
            HttpRequestMessage request = this.Request;
            if (!request.Content.IsMimeMultipartContent())
            {
                throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
            }

            if (!System.IO.Directory.Exists(System.Web.HttpContext.Current.Server.MapPath(@"~/App_Data/uploads")))
            {
                System.IO.Directory.CreateDirectory(System.Web.HttpContext.Current.Server.MapPath(@"~/App_Data/uploads"));
            }

            string root = System.Web.HttpContext.Current.Server.MapPath("~/App_Data/uploads");

            var provider = new MultipartFormDataStreamProvider(root);
            // System.Threading.Tasks.Task<byte[]> img ;
            byte[] img1 = new byte[1024];
            var task = await request.Content.ReadAsMultipartAsync(provider).
                ContinueWith<HttpResponseMessage>(o =>
                {


                    ///MY CODE///
                    FileStream fsOld = new FileStream(provider.FileData[0].LocalFileName, FileMode.Open, FileAccess.Read);

                    CreateThumbnail(fsOld.Name, 166, 166);

                    FileStream fs = new FileStream(provider.FileData[0].LocalFileName + "_thumb", FileMode.Open, FileAccess.Read);
                    BinaryReader br = new BinaryReader(fs);

                    byte[] image = br.ReadBytes((int)fs.Length);

                    br.Close();
                    var filepath = fs.Name;
                    var maxfilepath = fsOld.Name;
                    fs.Close();
                    fsOld.Close();

                    ////MY CODE END///////////

                    _memberService.SaveMemberImage(memberID, image, customerID);

                    try
                    {
                        if (System.IO.File.Exists(filepath))
                        {
                            System.IO.File.Delete(filepath);
                        }

                        if (System.IO.File.Exists(maxfilepath))
                        {
                            System.IO.File.Delete(maxfilepath);
                        }
                    }
                    catch
                    {
                    }


                    return new HttpResponseMessage()
                    {
                        Content = new StringContent("File uploaded.")
                    };
                }
            );

            return task;
        }

For html side

   <input type="file" id="myFile" ng-model="myfiles" accept="text/xml" />
                                <button type="button" ng-click="myFunction(myfiles)" class="btn btn-xs btn-purple mrg-t-5"><i class=" icon-cloud-upload"></i> Upload</button>

From JS
$scope.model = {
            name: "",
            type: ""
        };
$scope.myFunction = function (obj) {

            var x = document.getElementById("myFile");
            var txt = "";
            if ('files' in myFile) {
                if (x.files.length > 0 && x.files[0].type != "text/xml") {
                    toastr.error('Please import xml file only !'); return;
                }
                if (x.files.length == 0) {
                    toastr.error("Select one or more files."); return;
                } else {

                    for (var i = 0; i < x.files.length; i++) {
                        var file = x.files[i];
                        if ('name' in file) {
                            txt += file.name + "&nbsp;&nbsp;&nbsp;";
                        }
                        if ('size' in file) {
                            txt += bytesToSize(file.size);
                        }
                    }
                }
                function bytesToSize(bytes) {
                    var sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB'];
                    if (bytes == 0) return '0 Byte';
                    var i = parseInt(Math.floor(Math.log(bytes) / Math.log(1024)));
                    return Math.round(bytes / Math.pow(1024, i), 2) + ' ' + sizes[i];
                };
                document.getElementById("demo").innerHTML = txt;
                //return false;
                if (x.files.length > 0 && x.files[0].type == "text/xml") {
                    $http({
                        method: 'POST',
                        url: httpServiceUrlForService + "api/GPROMemberImport/PostXMLFileupload?reportingyear=" + $scope.ReportYear,
                        headers: { 'Content-Type': undefined },//$scope.sourceID
                        transformRequest: function (data) {
                            //debugger

                            var formData = new FormData();
                            formData.append("model", angular.toJson(data.model));
                            formData.append("file", data.files);

                            if (data.files) {
                                $scope.message = 'Please wait, Document is uploading...';
                                $scope.showPrgress = true;
                            }

                            return formData;
                        },
                        data: { model: $scope.model, files: x.files[0] }
                    }).
                   success(function (data, status, headers, config) {
                       //alert("success!");
                       $scope.showPrgress = false;
                       $scope.message = '';
                       $scope.files = '';
                       angular.element("input[type='file']").val(null);
                       document.getElementById("demo").innerHTML = '';
                       toastr.success('Document uploaded successfully!'); return;
                   }).
                   error(function (data, status, headers, config) {
                       //alert("failed!");
                       $scope.showPrgress = false;
                       $scope.message = '';
                       toastr.error("Failed !"); return;
                   });
                }
            }
            else {
                if (x.value == "") {                   
                    toastr.error("Select one or more files!");
                } else {                  
                    txt += "The files property is not supported by your browser!";
                    txt += "<br>The path of the selected file: " + x.value; // If the browser does not support the files property, it will return the path of the selected file instead.
                    toastr.error(txt);
                }
            }
            //  document.getElementById("demo").innerHTML = txt;

        }

Now while showing uploaded image in UI

<img class="list_photo" ng-src="data:image/png;base64,{{o.MemberImage}}" />