2012-03-29 10 views
0

ASP.NET MVCアプリケーションでuploadifyコントロールを使用して、ユーザーが選択したファイルをアップロードしています。Uploadifyコントローラアクションとファイル保持の問題

  1. コントローラのアクションは次のとおりです。私は2つの問題を抱えています

    public class FileController : Controller 
        { 
         private static string uploadedHTMLFile = string.Empty; 
    
         [HttpPost] 
         public ActionResult Upload(HttpPostedFileBase fileData) 
         { 
    //do something 
          } 
    } 
    

    :コントローラは、次のコードを持っている

    $("#file_upload").uploadify({ 
        'uploader': '/Scripts/uploadify/uploadify.swf', 
        'script': '/File/Upload', 
        'cancelImg': '/Scripts/uploadify/cancel.png', 
        'fileExt': '*.jpg;*.gif;*.png;*.bmp;*.htm;*.html;*.txt;*.zip', 
        'fileDesc': '*.jpg;*.gif;*.png;*.bmp;*.htm;*.html;*.txt;*.zip', 
        'auto': true, 
        'multi': true, 
        'sizeLimit': 1048576, 
        'buttonText': 'Upload Files', 
    
        'onComplete': function (event, queueID, fileObj, response, data) { 
         alert(fileObj.name);  
        } 
    }); 
    

    :私は、.jsファイルに次のコードを配置しました呼び出されていない。

  2. OnCompleteのアラートは発生しますが、アップロードされたファイルは、そのイベントを発生させた後に画面から消えます。画面にアップロードされたファイルのリストを保持するにはどうすればよいですか?

<input type="file" name="file_upload" id="file_upload" />は、.cshtmlファイルで定義されています。

答えて

0

以下を試してください。

コントローラー:

public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     return View(); 
    } 

    [HttpPost] 
    public ActionResult Upload(HttpPostedFileBase fileData) 
    { 
     if (fileData != null && fileData.ContentLength > 0) 
     { 
      var appData = Server.MapPath("~/app_data"); 
      var filename = Path.Combine(appData, Path.GetFileName(fileData.FileName)); 
      fileData.SaveAs(filename); 
     } 
     return Json(true); 
    } 
} 

Index.cshtmlビュー:

<input type="file" name="fileInput1" id="fileInput1" data-upload-url="@Url.Action("upload")" data-uploadify-root="@Url.Content("~/scripts")" /> 

Layout.cshtmlスクリプト参照:

<script type="text/javascript" src="@Url.Content("~/Scripts/jquery-1.5.1.js")"></script> 
<script type="text/javascript" src="@Url.Content("~/Scripts/swfobject.js")"></script> 
<script type="text/javascript" src="@Url.Content("~/Scripts/jquery.uploadify.v2.1.4.js")"></script> 
<script type="text/javascript" src="@Url.Content("~/Scripts/myscript.js")"></script> 

myscript.js

$(function() { 
    var fileInput = $('#fileInput1'); 
    var uploadifyRoot = fileInput.data('uploadify-root'); 
    var uploadUrl = fileInput.data('upload-url'); 
    fileInput.uploadify({ 
     'uploader': uploadifyRoot + '/uploadify.swf', 
     'script': uploadUrl, 
     'cancelImg': uploadifyRoot + '/cancel.png', 
     'fileExt': '*.jpg;*.gif;*.png;*.bmp;*.htm;*.html;*.txt;*.zip', 
     'fileDesc': '*.jpg;*.gif;*.png;*.bmp;*.htm;*.html;*.txt;*.zip', 
     'auto': true, 
     'multi': true, 
     'sizeLimit': 1048576, 
     'buttonText': 'Upload Files', 
     'onComplete': function (event, queueID, fileObj, response, data) { 
      alert(fileObj.name); 
     } 
    }); 
}); 
0

コントローラのアクションが呼び出されない理由は、コントローラのアクションのパラメータと一致していないことです。この場合、input type="file"の名前がコントローラのアクションのパラメータと一致しません。

は、あなたのコントローラで、次のように試してみてください:あなたはfileDataに入力タイプの名前を変更するか、他上述のように、あなたのアクションにパラメータの名前を変更することができますいずれか

[HttpPost] 
public ActionResult Upload(HttpPostedFileBase file_upload) 
{ 
} 

私の2番目の問題に対する解決策は解決しているとは確信していませんが、役立つかもしれません。

uploadifyオプションで'removeCompleted': falseを使用してみてください。ファイルアップロードが成功しても、そのファイルは消えずにページに残ります。

これが役に立ちます。

関連する問題