我刚开始学习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;
}
}
答案 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)
这样,调用的签名与控制器中的方法匹配。