AngularJs, DropZone.Js, MVC4 - Drag, Drop and Preview pre-Uploaded Image(s)

前端 未结 1 1787
你的背包
你的背包 2021-02-03 13:45

Html:





        
相关标签:
1条回答
  • 2021-02-03 13:55

    Solved (with some help from Mark Rajcok).

    Full Solution:

    Html:

    <script src="~/Scripts/jquery-1.9.1.js"></script>
    <script src="~/Scripts/DropZone-2.0.1.js"></script>
    <script src="~/Scripts/angular.js"></script>
    <script src="~/App_Angular/app.js"></script>
    
    <div ng-app ="myApp" ng-controller ="ProductsCtrl">
       <input ng-model="product.Name"/>
       <input ng-model="product.PhotoName" id="result" />
       <form id="dropzone"  class="fade well">Drop files here</form>
       <input type="button" value="Upload Files" ng-click="save(product)" />
    </div>
    

    Javascript:

    $("#dropzone").dropzone({
        url: 'Home/UploadFiles',
        paramName: "files", // The name that will be used to transfer the file
        maxFilesize: 102, // MB
        enqueueForUpload: false,
        accept: function (file, done) {
            angular.element(document.getElementById('result')).scope()
                .$apply(function (scope) {
                    scope.product.PhotoName = $('#result').val();
                });
    
            return done();
        }
    });
    
    function uploadClicked() {
        var dz = Dropzone.forElement("#dropzone");
        for (var i = 0; i < dz.files.length; i++) {
            dz.filesQueue.push(dz.files[i]);
        }
        dz.processQueue(dz);
        $('#innerQue').empty();
    }
    

    Modify dropzone.js here:

                  addedfile: function (file) {
                  file.previewTemplate = createElement(this.options.previewTemplate);
                  this.previewsContainer.appendChild(file.previewTemplate);
     rem out -->  //file.previewTemplate.querySelector(".filename span").textContent = file.name;
     add this --> return ($('input[id=result]').val(file.name)); 
    

    AngularController:

    function ProductsCtrl($scope, $routeParams, $http, $location) {
    $scope.products = [];
    $scope.product = {};
    $scope.save = function (data) {
        $scope.product = angular.copy(data);
        $http.post('/api/Products', $scope.product)
            .success(function () {
                window.uploadClicked();  <---------------------- Solution
            })
            .error(function (data) {
               // alert(data);
            });
    };
    

    ADDED BONUS TO MVC DEVELOPERS:

        public ActionResult UploadFiles(IEnumerable<HttpPostedFileBase> files)
        {
             //Works in Everything and IE10+**
    
            if (!string.IsNullOrEmpty(Request.Headers["X-File-Name"]))
            {
                string path = Server.MapPath(string.Format("~/Uploads/{0}", Request.Headers["X-File-Name"]));
                Stream inputStream = Request.InputStream;
    
                FileStream fileStream = new FileStream(path, FileMode.OpenOrCreate);
    
                inputStream.CopyTo(fileStream);
                fileStream.Close();
            }
       }
    

    enter image description here

    0 讨论(0)
提交回复
热议问题