FineUploader - MVC应用程序中的500服务器错误

时间:2015-03-26 15:44:19

标签: fine-uploader

我刚开始学习FineUploader。我相信我已经正确设置了一切。但是当我尝试上传文件时,我的JavaScript代码中出现500服务器错误。我的控制器方法,如下所示,永远不会被调用。所以在将controll传递给方法之前就已经发生了。

[HttpPost]
public FineUploaderResult UploadFile(FineUpload upload, string extraParam1, int extraParam2)
{
    // Asp.net MVC will set extraParam1 and extraParam2 from the params object passed by Fine-Uploader

    string dir = @"c:\upload\path";
    var filePath = Path.Combine(dir, upload.Filename);

    try
    {
        upload.SaveAs(filePath);
    }
    catch (Exception ex)
    {
        return new FineUploaderResult(false, error: ex.Message);
    }

    // the anonymous object in the result below will be convert to json and set back to the browser
    return new FineUploaderResult(true, new { extraInformation = 12345 });
}

我的JavaScript代码如下:

$(document).ready(function () {
    $("#fine-uploader").fineUploader({
        request: {
            endpoint: 'UploadFile'
        }
    });
});

我的ModelBinder类正在执行,如下所示:

public class ModelBinder : IModelBinder
        {
            public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
            {
                var request = controllerContext.RequestContext.HttpContext.Request;
                var formUpload = request.Files.Count > 0;

                // find filename
                var xFileName = request.Headers["X-File-Name"];
                var qqFile = request["qqfile"];
                var formFilename = formUpload ? request.Files[0].FileName : null;

                var upload = new FineUpload
                {
                    Filename = xFileName ?? qqFile ?? formFilename,
                    InputStream = formUpload ? request.Files[0].InputStream : request.InputStream
                };

                return upload;
            }
        }

2 个答案:

答案 0 :(得分:0)

如果您的预期端点未被命中且您的服务器正在返回对该请求的500响应,那么问题在于您的服务器或客户端配置的Fine Uploader。您的“UploadFile”端点选项似乎很可疑。我希望可以输入一条路径。

答案 1 :(得分:0)

对于遇到这篇文章的其他人,我的问题在于UploadController.cs中的以下代码行:

public FineUploaderResult UploadFile(FineUpload upload, string extraParam1, int extraParam2)

在FineUpload.cs中调用了BindModel,但之后我在调试时没有触发任何方法时出现500错误。 代码是我的cshtml页面如下:

<div id="fine-uploader-gallery"></div>
              <script>
                $("#fine-uploader-gallery").fineUploader({
                  template: 'qq-template-gallery',
                  request: {
                    endpoint: '@Url.Action("UploadFile", "Upload")'
                  },
                  thumbnails: {
                    placeholders: {
                      waitingPath: '/source/placeholders/waiting-generic.png',
                      notAvailablePath: '/source/placeholders/not_available-generic.png'
                    }
                  },
                  validation: {
                    allowedExtensions: ['jpeg', 'jpg', 'png'],
                    itemLimit: 3,
                    sizeLimit: 102400 // 50 kB = 50 * 1024 bytes
                  },
                  autoUpload: false,
                  debug: true
                });

                $("#trigger-upload").click(function () {
                  $("#fine-uploader-gallery").fineUploader("uploadStoredFiles");
                });
              </script>

这可能是我对这种优秀产品缺乏了解,但我能让它发挥作用的唯一方法就是将上面的问题路线改为

public FineUploaderResult UploadFile(FineUpload upload)

这样,调用的签名与控制器中的方法匹配。

相关问题