문제

나의 과정에서 얻을하려고합 jQuery 플러그인 Uploadify, 작업 ASP.NET MVC.

나는 플러그인을 보여주는 미와 다음 JavaScript snippet:

<script type="text/javascript">
    $(document).ready(function() {
        $('#fileUpload').fileUpload({
            'uploader': '/Content/Flash/uploader.swf',
            'script': '/Placement/Upload',
            'folder': '/uploads',
            'multi': 'true',
            'buttonText': 'Browse',
            'displayData': 'speed',
            'simUploadLimit': 2,
            'cancelImg': '/Content/Images/cancel.png'
        });
    });
</script>

들이 있는 것처럼 보이는 아름다 아이들은 모두 좋습니다.당신이 통지하는 경우는,"스크립트는"속성을 설정하면 내가/치/업로드,내 배치 컨트롤러와드로이드 액션입니다.

주요한 문제입니다,나는 어려움을 겪을 받고 이 작업을 불을 받는 파일입니다.나에 중단점을 설정하는 작업을 때 나는 파일을 선택하는 업로드,그것을 받고 되지 않습니다 실행됩니다.

했는데 방법을 변경하는 서명을 기반으로 이 문서:

public string Upload(HttpPostedFileBase FileData)
{
    /*
    *
    * Do something with the FileData
    *
    */
    return "Upload OK!";
}

그러나 이것은 여전히지 않는 불.

누구든지 나를 도울 수 있습니 작성을 얻을 업로드 컨트롤러 작업의 서명이 올바르게 그것이 실제로 불?내가 할 수 있습한 후 손잡이를 다루는 파일을 데이터 자신입니다.나는 그저 필요한 도움을 얻는 방법 행동을 불.

도움이 되었습니까?

해결책

public string Upload(HttpPostedFileBase FileData) {}

바-파일 업로드 uploadify 을 얻을 수 바인딩을 FileData.을 얻을 필요가 없습니다로 요청합니다.파일을 검색하는 파일 어렵게 조롱하며 시험합니다.

하는 경우 동작하지 않을 발사하는 모든이(즉하려고 디버깅 및 보면 중단점 이내에 이 방법은 히트),다음의 문제를 가능성이 높'스크립트'값을-당신은에서 실행되는 가상 디렉토리?그렇다면 당신이해야의 이름을 넣어는 디렉토리에서 전면입니다.Uploadify 사용하고 절대적인 경로입니다.

즉'스크립트:'/virtual_directory/치/업로드'

지금 uploadify 보내는 http://localhost/Placement/Upload.

도를 사용하여 경로를 디버거(http://haacked.com/archive/2008/03/13/url-routing-debugger.aspx)을 확인하는 귀하의 노선은 매핑됩니다.

다른 팁

는 경우 문제가 발생할 수 있습을 지정해야하는 작업을 업로드하여 설정한다...그것은 작동하지 않습니다 행동으로 얻는 작업입니다.

그래서,이:

public string Upload(HttpPostedFileBase FileData)
{
   //do something
}

이 있어야한다:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Upload(HttpPostedFileBase FileData)
{
   //do something
}

또한,는 것을 알고 사용하는 경우 이에서"기록에서"사이트 섹션,당신은 여기를 참조하십시오를 위해서 알려진 버그 uploadify 및 인증: http://geekswithblogs.net/apopovsky/archive/2009/05/06/working-around-flash-cookie-bug-in-asp.net-mvc.aspx

또한,단지 고객께,거기에 여러 가지 방법으로 MVC 에서 파일을 처리하는 업로드(사용하여 요청을 합니다.파일로 따 로트의 제안뿐만 아니라,전달하 HttpPostedFileBase 파일에서 인수로 작업 정의).그것은 말이 정말로 물질을 얻기 위해서 Uploadify 작동합니다.

이것은 어떻게 했을 구현하는 파일 업로드에서 모두.했던 작업 방법이 없는 매개변수를 사용이 현재 요청을 개체 다이빙으로의 컬렉션을 게시한 파일이 있습니다.

몇 가지 예제 코드에서는 내 구현:

[AcceptVerbs(HttpVerbs.Post)]
public ContentResult Upload() {
    if (Request.Files.Count > 0 && Request.Files[0].ContentLength > 0) {
        HttpPostedFileBase postedFile = Request.Files[0];
        // Do something with it
    }
}

물론에 대한 테스트를 작성이 되지 PITA.당신이하는 모의 여러 개를 얻기 위해서 그것을 작동하는,예를 들어:

var mockHttpContext = mocks.StrictMock<HttpContextBase>();
var mockRequest = mocks.StrictMock<HttpRequestBase>();
var postedFile = mocks.StrictMock<HttpPostedFileBase>();

var postedFileKeyCollection = mocks.StrictMock<HttpFileCollectionBase>();

mockHttpContext.Expect(x => x.Request).Return(mockRequest).Repeat.Any();
mockRequest.Expect(x => x.Files).Return(postedFileKeyCollection).Repeat.Any();

postedFileKeyCollection.Expect(x => x[0]).Return(postedFile).Repeat.Any();
postedFileKeyCollection.Expect(x => x.Count).Return(1);

postedFile.Expect(f => f.ContentLength).Return(1024);
postedFile.Expect(f => f.InputStream).Return(null);

는 것이 더 쉽 인터페이스를 만들로 게시한 파일 및 문제는,함께 구체적인 구현에 주입하고 컨트롤러를 사용하여 IoC.

내 생각이 크게 기반으로 이 게시물: 을 구현하는 HTTP 파일 업로드 ASP.NET MVC 포함하여 테스트하고 조롱

내 전체 솔루션은 이 문제가 해결될 수 있습니다.도움이 되기를 바랍니다.

http://zootfroot.blogspot.com/2010/12/mvc-file-upload-using-uploadify-with.html

을 읽는 문서,그것은 다음과 같은 전송하는 파일의 배열.을 시도했다:

public string Upload( HttpPostedFileBase[] fileData )

그것은 또한 가능하다 기본 모델을 바인더 작동하지 않습니다 HttpPostedFileBase 고 당신은 중 하나를 사용할 필요가 로리 메커니즘 또는 당신의 모형 바인더를 사용합니다.

여기에는 나의 간단한 면도기기(레이아웃을 마스터 Javascript 뭉치)

@{
ViewBag.Title = "Upload Email CSV";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<script type="text/javascript" src="@Url.Content("~/Scripts/Uploadify/jquery.uploadify.js")"></script>

<script type="text/javascript">

$(function () {
    var uploadUrl = "@Url.Content("~/UploadFile/UploadEmailCSV/")";
    var uploadSWF = "@Url.Content("~/Scripts/Uploadify/uploadify.swf")";
    var uploadifyButtonImage = "@Url.Content("~/Scripts/Uploadify/uploadify.swf")";

    $('#file_upload').uploadify({
        'fileSizeLimit': '0',
        'buttonImage': '/uploadify/browse-btn.png',
        'swf': uploadSWF,
        'uploader': uploadUrl,
        'onUploadSuccess': function(file, data, response) {
            alert('The file was saved to: ' + data);
        }
    });
});
</script>
<h2>Upload a comma separated list of email addresses</h2>
@using (Html.BeginForm("UploadEmailCSV", "UploadFile", FormMethod.Post, new { @class = "form-horizontal", @enctype = "multipart/form-data", @id = "frmUploadFiles" }))
{
    <input type="file" name="file_upload" id="file_upload" />
}

여기서 컨트롤러 방법

public ActionResult UploadEmailCSV()
    {
        var uploadedFile = Request.Files["Filedata"];

        if (uploadedFile != null && uploadedFile.ContentLength > 0)
        {
            var filePath = Path.Combine(Server.MapPath("~/UploadedFiles"), string.Format("{0}_{1}{2}", Path.GetFileNameWithoutExtension(uploadedFile.FileName), DateTime.Now.Ticks, Path.GetExtension(uploadedFile.FileName)));
            uploadedFile.SaveAs(filePath);
            return Content(string.Format("{0}_{1}{2}", Path.GetFileNameWithoutExtension(uploadedFile.FileName), DateTime.Now.Ticks, Path.GetExtension(uploadedFile.FileName)));

        }
        return Content("Error Uploading file!");
    }

다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top