2013-03-27 10 views
5

HTML:angularjs, DropZone.Js, MVC4 - Drag Drop i podgląd wstępnie załadowany plik (ów)

<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)" /> 

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(); 
} 

udało mi przepustkę do successly nazwa zdjęcia do $ scope.product.PhotoName po wywołaniu metody zapisu w ng-click.

I NIE MOGŁY były w stanie przesłać obraz. Nie wiem, jak nazwać "uploadClicked" z kątowego.

Każda pomoc zostanie doceniona.

+1

nie jest 'uploadClicked' globalnym w JavaScript, tak nie możesz kontrolować r po prostu wywołaj to ?: '$ scope.save = function (product) {...; uploadClicked(); } ' –

+0

Mark: Poważnie człowieku, czy jesteś taki mądry, czy jestem po prostu taki głupi? :) – Bye

Odpowiedz

8

Rozwiązany (z pomocą Marka Rajcoka).

Pełny Rozwiązanie:

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(); 
} 

Zmienić dropzone.js tutaj:

   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); 
     }); 
}; 

bonusem do 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

Powiązane problemy