我是小白,之前接触到上传文件的小功能,自己找了找别的大神写的,然后自己试着写了写,成了,分享给跟我一样的小白,少走弯路。
我用的是ajax上传,返回一个路径。可根据需求自行修改。
----------------------------------------------------------------------------------
先是controller
[HttpPost]
public ActionResult FileUpload()
{
string files = "";
HttpPostedFileBase myFile = Request.Files["file"];
string fileName = myFile?.FileName ?? "";
string fileFormat = fileName.Split('.')[fileName.Split('.').Length - 1]; // 以“.”截取,获取“.”后面的文件后缀
string name = fileName.Split('.')[0];
Regex imageFormat = new Regex(@"^(sldx)|(dotx)|(docx)|(doc)|(xls)|(xlsm)|(xlsb)|(xltx)|(xlsx)|(potx)|(ppsx)|(pptx)|(txt)|(pdf)"); // 验证文件后缀的表达式(这段可以限制上传文件类型)
if (string.IsNullOrEmpty(fileName) || !imageFormat.IsMatch(fileFormat)) // 验证后缀,判断文件是否是所要上传的格式
{
files = "error";
}
else
{
string timeStamp = DateTime.Now.Ticks.ToString(); // 获取当前时间的string类型
string firstFileName = timeStamp.Substring(0, timeStamp.Length - 4); // 通过截取获得文件名
string imageStr = "UploadFiles/"; // 获取保存附件的项目文件夹
string uploadPath = Server.MapPath("~/" + imageStr); // 将项目路径与文件夹合并
string pictureFormat = fileName.Split('.')[fileName.Split('.').Length - 1];// 设置文件格式
string fileNames = firstFileName + "." + fileFormat;// 设置完整(文件名+文件格式)
string saveFile = uploadPath + fileNames;//文件路径
myFile.SaveAs(saveFile);// 保存文件
// 如果单单是上传,不用保存路径的话,下面这行代码就不需要写了!
files = "/" + imageStr + fileNames;// 设置数据库保存的路径
}
return Json(new { files, name });
}
接着是js,ajax请求
$.ajax({
url: 'FileUpload',
async: false,
type: "Post",
cache: false,
processData: false,
contentType: false,
data: new FormData($(".formList")[0]),
success: function (data) {
alert(data);
}
});
最后是html结构
html结构必须得用form嵌套input这种方式,大家可以尝试一下。
<div class="support-form-item" id="upload-button">
<span>点击上传资料</span>
<form enctype="multipart/form-data" class="formList">
<div class="uploadImgBtn">
<input class="cooper-upload-btn" type="file" name="file" id="uploadFile">
</div>
</form>
</div>
代码写的比较不严密,希望多指正!