c# - 通过webkit目录html输入上传多个文件后,将文件上传到服务器后无法从客户端删除文件
问题描述
我正在使用带有 webkitdirectory 的 html 输入上传目录。我将文件以表格形式发送到 .net 控制器以解析数据并将其存储到数据库。整个过程运行良好,但是,在您上传文件后,您将无法再从本地计算机中删除该文件,直到您关闭 google chrome 实例(运行应用程序的位置)。
我无法弄清楚为什么会这样。我尝试处理所有上传的文件,关闭所有文件。我什至删除了所有的文件读取逻辑,只是让前端点击控制器上传方法,对文件什么都不做。
我下载了 Process Explorer 以查看发生了什么,这是我发现的:
当控制器被击中时,chrome为目录中的每个文件创建了2个进程(我不知道为什么要创建3个)。该方法运行完成后,每个上传的文件都有一个进程运行。由于上传后有文件正在运行,因此在我的本地计算机上我无法删除或重命名文件,但是由于某种原因我可以对其进行编辑。
我知道 httpPostedFileBase 也包含在来自 ajax 请求的 Request.Files 中,我不确定这是否是问题,因为我还将文件传递到视图模型中。我什至拿出了视图模型,只处理了 Request.Files 中的文件,但仍然遇到同样的问题。
我遇到了一个与我的问题类似的帖子,但没有真正的解决方案或解决他们的问题。[在这里发布][https://stackoverflow.com/questions/717878/cant-delete-a-file-from-a-client-after-uploading-it-to-the-server]
$("input:file").change(function () {
var allFiles = $('input[name="allFilesInput"]').prop('files');
// Quantity of files uploaded...
var fileCount = allFiles.length;
if (fileCount > 0) {
var form = $("#Form");
var formData = new FormData(form[0]); // data within the form
// Append all files to formData to send to backend...
for (var i = 0; i < fileCount; i++) {
formData.append(allFiles[i].name, allFiles[i]);
}
if ($(form).valid()) {
$.ajax({
type: "POST",
url: "/Controller/UploadFiles",
data: formData,
contentType: false,
beforeSend: function () {
// Does stuff
},
processData: false,
cache: true,
success: function (partialViewResult) {
// Does stuff
}
});
return false;
}
}
});
<form id="Form" enctype="multipart/form-data" method="post">
<input id="allFilesInput" name="allFilesInput" type="file" hidden webkitdirectory/>
</form>
[HttpPost]
public ActionResult UploadFiles(MyViewModel model)
{
// Empty upload no processing done, chrome still creates processes.
}
public class MyViewModel : ViewModel
{
public IEnumerable<HttpPostedFileBase> AllPayrollFiles { get; set; }
}
解决方案
推荐阅读
- ruby - 无法在 rbenv 环境中切换 gem 版本
- c# - IEnumerable 是否能够包含多种类类型?
- azure - 限制在所有服务结构节点中的一个服务实例
- python - 如何在 Holoviews 中将使用 datashade 生成的散点图与 RGB 图像链接?
- c++ - createprocess:某些应用程序运行其他应用程序不运行
- python - 可迭代解包和切片分配
- pandas - 查找、haversine 和聚合
- autohotkey - 使用 AutoHotKey 使用 while 循环迭代文件树
- python - Python 冒泡排序后重新打印原始列表
- python - 如何使随机唯一编号仅使用一次