在mvc应用程序中上传Ajax文件

时间:2012-09-08 13:44:30

标签: c# asp.net-mvc jquery ajax-upload

在我的MVC应用程序中我使用Ajax上传(版本3.5(23.06.2009))在这部分代码中:

<div id="userPhotosUpload">
   <span class="tabs_fieldDesc">@Html.Label("txtPhotoDescription", "Desc")</span>
    @Html.TextBox("txtPhotoDescription", "", new { @maxlength = "30", @class = "tabs_fullLength" })              
    <div class="buttonLine">
       <button id="btnAddUserPhoto">Add picture</button>
    </div>
    <input id="txtSelectedPhotoFolderId" type="hidden" value="" />
</div>
<script type="text/javascript">
$(document).ready(function () {
//photo upload
var photoUpload = new AjaxUpload($('#btnAddUserPhoto'), {
    action: '/Profile/ProcessPhoto',
    name: 'uploadfile',
    responseType: 'json',
    autoSubmit: true,
    onSubmit: function (file, ext) {
        showProgressBar();
        photoUpload.setData({
            photoDescription: $('#txtPhotoDescription').val(),
            idPhotoFolder: $('#txtSelectedPhotoFolderId').val()
        });
    },
    onComplete: function (file, response) {
        hideProgressBar();
        $('#txtPhotoDescription').val('');
        var currentSelectedFolderId = getSelectedFolder();
        LoadPhotoFolders();
        SelectPhotoFolder(currentSelectedFolderId);
    }
});
</script>

如果我上传更大的文件然后1MB,AjaxUpload不会在控制器中调用方法:

[Authorize]
[HttpPost]
[AcceptVerbs(HttpVerbs.Post)]
[ValidateInput(false)]
public JsonResult ProcessPhoto(string photoDescription, Int64 idPhotoFolder)
{
    //process request with file
}

Fiddler2告诉我这个:

  

POST / Profile / AddUserPhoto HTTP / 1.1主机:localhost:55538 User-Agent:   Mozilla / 5.0(Windows NT 6.1; WOW64; rv:15.0)Gecko / 20100101   Firefox / 15.0接受:   text / html的,应用/ XHTML + xml的,应用/ XML; Q = 0.9, / 的; Q = 0.8   Accept-Language:cs,en-us; q = 0.7,en; q = 0.3 Accept-Encoding:gzip,   deflate连接:keep-alive Referer:   曲奇饼:   AspxAutoDetectCookieSupport = 1;   .ASPXAUTH = AB45C67E90AD19402C47818CC4BC78504C96F6BB063E07F89E918F22D3A42B441B14B57818448BAAD3ABEEED48C1EA41431C89F149B3BA53D59950694F33C447462EE56AC33CFB54F1ADAC7B7A4F5D69F6ED3855A649F217EDC56B2250E6BFC87052C0640C1C191F212A76B3A9D9973609F6E537992BBADBC1A3F97853A8B90485DE9C11819D54D1F0D0F9838EDAE73E;   ASP.NET_SessionId = gflyfmea2ty2gm3i4rea2adx内容类型:   多部分/格式的数据;边界= --------------------------- 481414423196   内容长度:6046387

     

----------------------------- 481414423196 Content-Disposition:form-data; NAME = “photoDescription”

     

----------------------------- 481414423196 Content-Disposition:form-data; NAME = “idPhotoFolder”

     

136   ----------------------------- 481414423196 Content-Disposition:form-data;命名=一个 “UploadFile”; filename =“sam_1103.jpg”内容类型:   图像/ JPEG

     

HTTP / 1.1 504 Fiddler - 接收失败内容类型:text / html;   charset = UTF-8连接:关闭时间戳:15:30:34.321

     

[Fiddler] ReadResponse()失败:服务器未返回响应   对于这个请求。

有些想法在哪里出问题?

由于

1 个答案:

答案 0 :(得分:1)

似乎服务器没有响应(Http 504)。

方法ProcessPhoto是否完全被调用?

如果没有,那么你应该看看你的.config设置。您还可以在未启用fiddler的情况下检查ajax onComplete方法中的服务器响应。

如果调用了服务器ProcessPhoto方法,则在本地Web服务器和远程Web服务器上都会发生错误(消除任何其他可能的超时源会很好)。

最后,如果您的方法被调用,是否可能是您的照片处理而不是Web服务器通信实际上很慢?最后一个是我最初的猜测,但更多信息会很好: - )

无论如何,只是一些想法: - )