我想让用户从他/她的电脑中选择一个文件,然后将其上传到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");
部分,然后重定向。
答案 0 :(得分:0)
您从表格标签中遗漏了enctype="multipart/form-data"
。如果没有这个,在提交表单时不会将文件数据上传到服务器。
将表单调用更改为:
@using (Html.BeginForm("Upload", "Home", FormMethod.Post, new { enctype = "multipart/form-data" }))