我有以下剃刀代码:
<div class="container">
@Html.ValidationSummary(false)
@using (Html.BeginForm("EncryptFile", "Encryption", new { returnUrl = Request.Url.AbsoluteUri }, FormMethod.Post, new { @id = "encryptionform", @class = "form-horizontal" }))
{
<div class="form-group">
@Html.Label("File", new { @class = "control-label col-md-2" })
<div class="col-md-10">
<input type="file" id="encryptfilefield" name="uploadedfile" enctype='multipart/form-data'/>
</div>
</div>
<button type="submit" id="encryptfilebutton">Encrypt</button>
<button id="decryptfilebutton" type="button">Decrypt</button>
<button id="reencryptfilebutton" type="button">Re-Encrypt</button>
}
</div>
单击加密按钮时会调用以下控制器代码:
[HttpPost]
public ActionResult EncryptFile(string uploadedfile)
{
/*process the file without uploading*/
return Json(new { status = "success", message = "Encrypted!" });
}
点击加密按钮后,我可以点击此操作,但uploadedfile
字符串始终显示为null
。如何获取所选文件的填充文件路径?请注意,我没有尝试将其上传到服务器(尽管名称中出现“上传”),我只需要文件路径。
修改
我在IE 11中看到以下内容完全显示文件路径(警报内的部分):
alert($("#encryptfilefield").val());
然而,这不是一个完整的解决方案,似乎没有解决方案,因为它是一个安全问题。 谢谢。
答案 0 :(得分:2)
更新了答案
不幸的是,没有办法在所有浏览器中一致地获取该信息。这里有关于此主题的多个帖子,结论是浏览器不允许出于安全目的。
我确实发现在IE 11中它们确实包含输入dom元素.value属性中的路径,但我不知道它是否适用于其他版本,并且它在chrome中不起作用。
$('input[type=file]').change(function () {
console.dir(this.value);
console.dir(this.files[0])
})
不幸的是,这是你能期待的最好的。这是一篇文章,你可以做一些事情来实现一些非常具体的场景。
原始答案(如何获取文件路径“之后”到达服务器)
我想的空参数问题是因为MVC绑定了元素名称属性。
<input type="file" id="encryptfilefield" name="uploadedfile" enctype='multipart/form-data'/>
并且您的控制器操作被标记为类型字符串,这不是您的输入类型。
你可以改变它,
[HttpPost]
public ActionResult EncryptFile(HttpPostedFileBase uploadedfile)
{
或者尝试直接从Request对象中抓取文件,如下所示,你必须先将它保存到某个地方然后才能获得它的完整路径,我不相信你会得到它的起源地的文件路径,只有在你保存之后。
[HttpPost]
public ActionResult EncryptFile(string uploadedfile)
{
HttpPostedFileBase myfile = Request.Files[0];
if (file.ContentLength > 0)
{
// extract only the fielname
var fileName = Path.GetFileName(file.FileName);
// store the file inside ~/App_Data/uploads folder
var path = Path.Combine(Server.MapPath("~/App_Data/uploads"),fileName);
file.SaveAs(path);
}
/*process the file without uploading*/
return Json(new { status = "success", message = "Encrypted!" });
}