Webmatrix文件上传错误

时间:2012-11-27 08:05:43

标签: file-upload razor webmatrix

我正在尝试创建一个上传页面,我上传一个.swf文件,然后将文件名添加到我的数据库中。以前我已经能够实现这一点,但是,现在它似乎给我错误“索引超出范围。必须是非负的且小于集合的大小。参数名称:索引”我的代码如下:

@{
Page.Title = "Add Game";

//Variables
var GameName = "";
var Tags = "";
var Gamefile = "";

//Required fields
Validation.RequireField("Name", "Please give the game a name.");
Validation.RequireField("file", "Please upload a file.");
//Maximum name length
Validation.Add("Name",
    Validator.StringLength(
        maxLength: 100,
        errorMessage: "Name must be less than 100 characters")
        );
//SWF file validation
Validation.Add("file",
    Validator.Regex(@"^.*\.(swf|SWF)$", "Invalid filetype, you must upload a .swf flash file")
    );

    if (IsPost && Validation.IsValid()) {
    var db = Database.Open("Surgestuff");
    var gCat = "";
    var fileData = Request.Files[0];
    var fileName = Guid.NewGuid().ToString() + ".swf";
    var fileSavePath = Server.MapPath("~/upload/" + fileName);
    var AddBy = WebSecurity.CurrentUserName;
    gCat=Request["formCat"];
    Gamefile = fileName;
    fileData.SaveAs(fileSavePath);
    var SQLINSERT = "INSERT INTO Games (Name, file_path, Category, AddBy) " + "VALUES (@0, @1, @2, @3)";
    db.Execute(SQLINSERT, GameName, Gamefile, gCat, AddBy);
    Response.Redirect("~/Games");

    }
}

出于某种原因,即使我提交了文件,

var fileData = Request.Files[0];给了我那个错误

1 个答案:

答案 0 :(得分:2)

网页2验证助手不适用于input type="file"。它们仅适用于Request.Form集合中包含的元素。文件上传显示在Request.Files集合中。

您可以采取几种方法来验证文件上传。您可以使用ModelState:

if(IsPost && Request.Files[0].ContentLength == 0){
    ModelState.AddError("file", "You must choose a file");
}

if (IsPost && Validation.IsValid() && ModelState.IsValid) {
    // etc 

或者您可以添加隐藏字段,并在提交表单时,使用JavaScript将其值与文件上载的值一起填充。然后,您可以像当前一样尝试使用新的验证帮助程序,而是使用隐藏字段。