你能写一个aps,net mvc 按照文件分类(下拉框选择)来把用户上传的文件存放至项目某个子文件夹的例子吗
时间: 2023-06-06 20:05:50 浏览: 52
可以的。下面是一个简单的实现例子:
首先,在 View 页面上,添加一个下拉框和文件上传控件,用于选择文件分类和上传文件:
```
@using (Html.BeginForm("UploadFile", "Home", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
<div class="form-group">
@Html.Label("Select Category")
@Html.DropDownList("SelectedCategory", new List<SelectListItem>
{
new SelectListItem { Text = "CategoryA", Value = "CategoryA" },
new SelectListItem { Text = "CategoryB", Value = "CategoryB" },
new SelectListItem { Text = "CategoryC", Value = "CategoryC" }
}, "Select a Category", new { @class = "form-control" })
</div>
<div class="form-group">
@Html.Label("Select File")
<input type="file" name="File" />
</div>
<button type="submit" class="btn btn-primary">Upload</button>
}
```
接下来,在 Controller 中,创建一个接受文件上传请求的方法 UploadFile,并在该方法中实现文件分类和保存:
```
public ActionResult UploadFile(HttpPostedFileBase file, string selectedCategory)
{
if (file != null && file.ContentLength > 0)
{
// 获取上传文件的扩展名
string fileExtension = Path.GetExtension(file.FileName);
// 组合文件名
string fileName = Guid.NewGuid().ToString() + fileExtension;
// 获取上传文件的保存路径
string savePath = Server.MapPath("~/UploadedFiles/" + selectedCategory + "/");
// 如果目录不存在,则创建
if (!Directory.Exists(savePath))
{
Directory.CreateDirectory(savePath);
}
// 保存文件
file.SaveAs(savePath + fileName);
// 重定向到上传成功页面
return RedirectToAction("UploadSuccess");
}
// 如果没有选择文件,则返回错误信息
ModelState.AddModelError("", "Please select a file to upload.");
return View();
}
```
在上面的代码中,我们创建了一个保存路径,路径包括了用户选择的分类,然后再将上传的文件保存到该路径下。如果路径不存在,则会自动创建。最后,我们重定向到一个上传成功页面。需要注意的是,我们使用了 Guid 来生成唯一的文件名,以防止重名问题。
这就是一个简单的实现例子,你可以根据需要进行改进。