我使用CSHTML作爲視圖C#剃刀上傳文件
這是我輸入:
@Html.TextArea("DESCRIPTION", null, new { @class = "field-longtext", @cols = 100, @rows = 5, maxlength = 255 })
@Html.TextBox("DOC_TYPE", null, new { @class = "field-longtext", maxlength = 10 })
@Html.TextBox("DOC_FILE", null, new { @class = "field-longtext", @type = "file" })
,並使用AJAX後
function UploadFile() {
var url = '@Url.Action("CreateUploadFile")';
var data = {};
var result = false;
$('#@ViewBag.FormName').find('input, textarea').each(function() {
data[$(this).attr('name')] = $(this).val();
});
data.PROBLEM_CALL_ID = @Model.Model.PROBLEM_CALL_ID;
$.ajax({
type: 'POST',
url: url,
data: data,
async: false,
success: function (data) {
if (data.result) {
var selectedRow = SubFormService.tableList['#@ViewBag.TableName'].selectedRow;
result = true;
} else {
alert(data.errorMsg);
result = false;
}
}
});
return result;
}
我的控制器:
[HttpPost]
public ActionResult CreateUploadFile(Models.Shared.DocumentModel vm)
{
var id = -1;
var result = string.Empty;
var json = new BasicJsonResult();
var file = vm.DOC_FILE;
LogUtility.Debug(file.ContentLength.ToString());
if (file != null && file.ContentLength > 0)
{
var fileName = Path.GetFileName(file.FileName);
LogUtility.Debug(fileName);
LogUtility.Debug(Server.MapPath("~/Images/"));
var path = Path.Combine(Server.MapPath("~/Images/"), fileName);
file.SaveAs(path);
}
return Json(json, JsonRequestBehavior.AllowGet);
}
代碼var file = vm.DOC_FILE;
提醒我(對象引用未設置爲對象的實例。),但我可以獲得另一個控制值(vm.DESCRIPTION, vm.DOC_TYPE
)。
請幫忙。
另外,我想在文件上傳時下載文件。
嗨... 當我更改爲var data = new FormData($('#@ ViewBag.FormName')[0]); 它引發異常Uncaught TypeError:非法調用。 當我打印出數據信息時,就像下面的 {「DOC_FILE」:「C:\\ fakepath \ image1-11.png」,「DESCRIPTION」:「asdasd」,「DOC_TYPE」:「123」} 我不知道它爲什麼顯示C:\\ fakepath \ .. 文件的目錄應該是C:\\ Desktop \ .... –
原因是這是因爲安全原因只有文件名被髮送到服務器。客戶端上的目錄被混淆,並且永遠不會到達您的服務器。這是設計的,你不能依靠檢索服務器上的完整目錄結構。 –