MVC3

2011-05-23 29 views
8

ile plupload kullanımı Bu yüzden, MVC3'te flash çalışma zamanı kullanarak plupload uyguladım.MVC3

Düzeltme eylemini kullanarak karşıya yüklediği ve tümünü çalıştırdığı anlamıyla mükemmel çalışır. Bununla birlikte, cevabı kontrol edebilmek ve plupload ile halledebilmeyi gerçekten çok isterdim, ancak yanıt veremiyorum.

fileUploaded'i geçersiz kılmayı denedim, ancak argümanlardan hiçbir şey alamıyorum. Basit ipleri geri almayı denedim, json ve neyin var? Müşteri tarafında bir şey göremiyorum. Ve elbette parıltılı olarak gönderilirken, istekleri hata ayıklamasıyla bile hatalandıramaz:/

Hata olayıyla aynıdır ve istisnalar atar. Özel durumu bir hata olarak doğru şekilde yorumlar, ancak her zaman 2038 gibi bir kodla veya diğer uçtan çıkan bir kodla #IO ERROR olur. Özel durum dizgimi veya hiçbir şey gösteremiyorum. Biri yardım edebilir mi?

Bonus sorusu: Oturum/çerez verilerini plupload ile birlikte nasıl gönderirim? Böylece oturumuma eylemimde erişebilirim?

cevap

13

şu benim için çalışıyor:

[HttpPost] 
public ActionResult Upload(int? chunk, string name) 
{ 
    var fileUpload = Request.Files[0]; 
    var uploadPath = Server.MapPath("~/App_Data"); 
    chunk = chunk ?? 0; 
    using (var fs = new FileStream(Path.Combine(uploadPath, name), chunk == 0 ? FileMode.Create : FileMode.Append)) 
    { 
     var buffer = new byte[fileUpload.InputStream.Length]; 
     fileUpload.InputStream.Read(buffer, 0, buffer.Length); 
     fs.Write(buffer, 0, buffer.Length); 
    } 
    return Json(new { message = "chunk uploaded", name = name }); 
} 

ve istemci üzerinde:

$('#uploader').pluploadQueue({ 
    runtimes: 'html5,flash', 
    url: '@Url.Action("Upload")', 
    max_file_size: '5mb', 
    chunk_size: '1mb', 
    unique_names: true, 
    multiple_queues: false, 
    preinit: function (uploader) { 
     uploader.bind('FileUploaded', function (up, file, data) { 
      // here file will contain interesting properties like 
      // id, loaded, name, percent, size, status, target_name, ... 
      // data.response will contain the server response 
     }); 
    } 
}); 

Bildiğim kadarıyla ikramiye sorusu söz konusu olduğunda ben oturumları kullanmayın tarafından cevap razıyım iyi ölçeklenmediklerinden, ancak muhtemelen bu cevabı beğenmediğinizi bildiğim için, multipart_params:

ve ardından doğru oturumu oluşturmak için sunucuda perform some hacks. Burada

+0

Meraktan soruyorum, ne olur Bir oturum yerine kullanmak? Sadece benim durumumda, sadece giriş yapmış kullanıcıyı almak için kullanıyorum. – Dynde

+0

@Dynde, bu benim uygulamak istediğim senaryoya göre değişecek. Örneğin, giriş yapmış kullanıcı adını almak için formlar kimlik doğrulama cookie'sini kullanacağım => User.Identity.Name ve eğer kullanıcı bilgisine giriş yapmam gerekirse, bu bilgiyi nereden alabilirim? (genellikle bir veritabanı). –

+0

Seni duyuyorum. Benim için bu profil sorgusu sadece oturum ile önlenebilecek bir şeydir, bugüne kadar bunun için oturumu kullanmanın kötü bir fikir olduğunun farkında değildim :) – Dynde

5

Görünüş:

$("#uploader").pluploadQueue({ 
     // General settings 
     runtimes: 'silverlight', 
     url: '/Home/Upload', 
     max_file_size: '10mb', 
     chunk_size: '1mb', 
     unique_names: true, 
     multiple_queues: false, 

     // Resize images on clientside if we can 
     resize: { width: 320, height: 240, quality: 90 }, 

     // Specify what files to browse for 
     filters: [ 
      { title: "Image files", extensions: "jpg,gif,png" }, 
      { title: "Zip files", extensions: "zip" } 
     ], 

     // Silverlight settings 
     silverlight_xap_url: '../../../Scripts/upload/plupload.silverlight.xap' 
     }); 

     // Client side form validation 
     $('form').submit(function (e) { 
     var uploader = $('#uploader').pluploadQueue(); 

     // Files in queue upload them first 
     if (uploader.files.length > 0) { 
      // When all files are uploaded submit form 
      uploader.bind('StateChanged', function() { 
       if (uploader.files.length === (uploader.total.uploaded + uploader.total.failed)) { 
        $('form')[0].submit(); 
       } 
      }); 

      uploader.start(); 
     } else { 
      alert('You must queue at least one file.'); 
     } 

     return false; 
     }); 

Ve Denetleyici'de:

tüm ... Hiçbir öbek Kontrolör gerekli mi
[HttpPost] 
public string Upload() { 
      HttpPostedFileBase FileData = Request.Files[0]; 

      if (FileData.ContentLength > 0) { 
      var fileName = Path.GetFileName(FileData.FileName); 
      var path = Path.Combine(Server.MapPath("~/Content"), fileName); 
      FileData.SaveAs(path); 
      } 

      return "Files was uploaded successfully!"; 
     } 

...