如何使用MVC5获取输入文件字段的值?

时间:2014-07-28 15:26:56

标签: c# asp.net-mvc flickr

我想让用户从他/她的电脑中选择一个文件,然后将其上传到Flickr。关键是,当我从我的计算机上传自定义图像时,一切正常,但是当我为输入文件添加额外的字段但程序突然不起作用时。

Test.cshtml:

@using (Html.BeginForm("Upload", "Home", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
    <fieldset>
        <input type="file" name="file" />
        <input type="submit" value="Upload!" />
    </fieldset>
}

HomeController.cs:

public ActionResult Upload(HttpPostedFileBase file, FormCollection form)
{
    if (Request.QueryString["oauth_verifier"] != null && Session["RequestToken"] != null)
    {
        // Flickr relevant code...
        var tmpFilePath = Server.MapPath("~/App_Data/Uploads/Pictures");

        if (file == null || file.ContentLength == 0)
        {
            return RedirectToAction("Index"); // It keeps hitting this!
        }

        var filename = Path.GetFileName(file.FileName);
        var path = Path.Combine(tmpFilePath, filename);

        if (System.IO.File.Exists(path))
        {
            System.IO.File.Delete(path);
        }

        file.SaveAs(path);

        string photoId = flickr.UploadPicture(path, "Test picture");

        if (String.IsNullOrEmpty(photoId))
        {
            System.Diagnostics.Debug.WriteLine("Upload failed!");
        }

        System.IO.File.Delete(path);
    }
    else
    {
        // Flickr relevant code...
    }

    return View("Test");
}

只要我知道,因为MVC是服务器端框架,首先我需要将图片上传到我的服务器,然后将其上传到Flickr。关键是,我想将文件放在我的App_Data/Upload/Pictures文件夹中,然后将其上传到Flickr,然后从那里删除它。所以,我想保持我的服务器清洁。

更新:不断点击return RedirectToAction("Index");部分,然后重定向。

1 个答案:

答案 0 :(得分:0)

您从表格标签中遗漏了enctype="multipart/form-data"。如果没有这个,在提交表单时不会将文件数据上传到服务器。

将表单调用更改为:

@using (Html.BeginForm("Upload", "Home", FormMethod.Post, new { enctype = "multipart/form-data" }))