使用Angular.js和C#导入文件

时间:2016-04-18 12:29:13

标签: c# angularjs umbraco7

我正在构建一个Umbraco7套件,我有点停滞不前。我对Angular和C#的经验很少,我尝试做的是添加一个导入选项,后台用户可以导入xls文件并使用xls内容填充现有的数据库表。

这是我到目前为止所做的,我不知道如何将文件保存在第一个地方,更不用说从xls文件中提取值了。

HTML

// This is the view (table.html)
// Excluding the export blank xls file table.

<div class="import-div">
    <input type="file" name="MyFile" />
    <input type="submit" class="btn btn-danger" ng-click="ButtonClickHandler()" />
</div>

Angular.Js控制器文件

// Here is my js controller file:

    angular.module("umbraco")
        .controller("ImportCtrl", function ($scope, keyResource) {
            $scope.ButtonClickHandler = function () {
                console.log("I was clicked!");
            };
        });

C#Controller

    //This is the C# controller.

        using AngularUmbracoPackage.Models;
        using System;
        using System.Collections.Generic;
        using System.Linq;
        using System.Web.Mvc;
        using System.Web.Security;
        using umbraco.cms.businesslogic.member;
        using Umbraco.Web.Mvc;
        using Umbraco.Core.Persistence;
        using System.Configuration;
        using Umbraco.Core.Logging;
        using System.Data;
        using System.Text;
        using System.IO;
        using System.Web;
        using System.Net.Http;

        namespace AngularUmbracoPackage.App_Code
{

    [HttpPost]
    public class ImportNewDictionaryController
    {
        [HttpPost]
        public ActionResult importFile()
        {
             public string fileName;
        public string DictionaryKey;

        var db = UmbracoContext.Application.DatabaseContext.Database;
        var insert = new Sql("INSERT INTO cmsDictionary VALUES('" + DictionaryKey + "'");

        }


    }
}

任何人都可以给我任何可以帮助或指导我的链接吗?

2 个答案:

答案 0 :(得分:2)

这就是我设法让它发挥作用的方式!

using UmbracoImportExportPlugin.Models;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Web;
using System.Web.Mvc;
using Umbraco.Core.Persistence;
using Umbraco.Web;
using Umbraco.Web.WebApi;

namespace UmbracoImportExportPlugin.App_Code
{

    public class ImportNewDictionaryController : UmbracoAuthorizedApiController
    {
        public string basePath;

        //Locate specific path
        public void LocatePath()
        {
            this.basePath = System.Web.Hosting.HostingEnvironment.MapPath(@"/upload");
        }
        [System.Web.Http.AcceptVerbs("GET", "POST")]
        //[System.Web.Http.HttpPost]
        public void SaveFile()
        {
            var myContext = Request.TryGetHttpContext();
            List<string> keys = new List<string>();
            if (myContext.Success)

            {
                HttpPostedFileBase myFile = myContext.Result.Request.Files["file"];
                if (myFile == null)
                {
                   throw new HttpException("invalid file");
                }
                else
                {
                    StreamReader csvreader = new StreamReader(myFile.InputStream);


                    while (!csvreader.EndOfStream)
                    {
                        var line = csvreader.ReadLine();
                        if (line != "Key")
                        keys.Add(line);
                    }
                }
                UmbracoDatabase db = ApplicationContext.DatabaseContext.Database;
                var remove = new Sql("DELETE FROM cmsDictionary");
                int rem = db.Execute(remove);
                foreach (string item in keys)
                {
                    var insert = new Sql("INSERT INTO cmsDictionary VALUES (NEWID(), null,'" + item + "')");
                    int res = db.Execute(insert);
                }
            }
        }


    }
}

答案 1 :(得分:1)

这对我有用

在你的js文件中(或角度控制器之前):

    try {
            ResultSet sdResult = sdbConnInstance.executeQuery(SOURCE_DB_QUERY1.toString());
            logger.info("bulkInsert started at: " + dateFormat.format(cal.getTime()));
            LinkedHashMap<String, String> columnMap = new LinkedHashMap<String, String>();
            ArrayList<LinkedHashMap> bulkList = new ArrayList<LinkedHashMap>();
            operationCleaned = true;
            int counter = 0;
            int countToBulkInsert = 0;
            while(sdResult.next()) {                                
                operationCleaned = false;
                counter++;
                for (int i = 0; i < SOURCE_DB_COLUMNS1_ARRAY.length; i++) {
                        String column = SOURCE_DB_COLUMNS1_ARRAY[i];
                        try {
                                columnMap.put(column, sdResult.getString(column));
                        } catch (Exception e) {
                                columnMap.put(column, null);
                        }

                }
                bulkList.add(columnMap);
                columnMap = new LinkedHashMap<String, String>();
                if (countToBulkInsert == BULK_INSERT_COUNT) {
                        tdbConnInstance.insertWithBatch(INSERT_QUERY_TEMPLATE.toString(), bulkList);
                        lEndTime = System.currentTimeMillis();
                        logger.info(countToBulkInsert + " rows are inserted in " + (lEndTime - lStartTime) + " ms. Total count=" + counter + ". New query is building...");
                        lStartTime = System.currentTimeMillis();
                        countToBulkInsert = 0;
                        bulkList = new ArrayList<LinkedHashMap>();
                        operationCleaned = true;
                }
            }
   } catch (Exception e) {
        e.printStackTrace();
        logger.error("Failed to insert!");
   }

在你的controller.js中:

angular.module("umbraco").directive("qwSingleFileUpload", function () {
    return {
        restrict: "A",
        replace: false,
        scope: {
            myValue: '=qwSingleFileUpload'
        },
        link: function (scope, element, attr) {
            element.bind('change', function () {
                scope.myValue = element[0].files[0];

                if (scope.$$phase) {
                    scope.$apply();
                }
            });
        }
    }
});
在您看来

$scope.fileUpload = {};
$scope.doUpload = function () {
    var uploadUrl = "/umbraco/api/storelocator/go/";
    var fd = new FormData();

    fd.append('file', $scope.fileUpload);

    $http.post(uploadUrl, fd, {
        transformRequest: angular.identity,
        headers: { 'Content-Type': undefined }
    })
    .success(function (data) {
        // ok
    })
    .error(function () {
        // handle upload error
    }); 
}
你的代码隐藏中的

<input type="file" qw-single-file-upload="fileUpload" /><br />
<br /><br />
<input type="button" ng-click="doUpload()" value="Upload" />