javascript - 如何在c#中取消文件复制?
问题描述
我已添加以下代码来复制本地计算机中的文件。就我而言,如果用户单击取消按钮,我想使用 c# 停止文件复制进度。我的代码如下。
JS代码:
for(var i = 0; i < file.length; i++){
var formdata = new FormData();
formdata.append("Files", file[i]);
var ajax = new XMLHttpRequest();
ajax.upload.addEventListener("progress", progressHandler, false);
ajax.addEventListener("load", completeHandler, false);
ajax.addEventListener("error", errorHandler, false);
ajax.addEventListener("abort", abortHandler, false);
ajax.open("POST", "/Save");
ajax.send(formdata);
}
C#代码:
using (FileStream stream = new FileStream(fullPath, FileMode.Append, FileAccess.Write, FileShare.ReadWrite))
{
using (Content)
{
Content.CopyTo(stream);
}
}
我有取消按钮来取消文件进度。在那我已经中止了正在进行的进展。我已经尝试在 xml 中使用 abort() 来阻止请求,但它不会阻止文件复制。我怎样才能达到我的要求。
解决方案
您应该查看带有取消令牌的 Async 方法(链接)
在保存中,您创建一个 CancellationTokenSource (链接)并将其存储在某处
然后,您的取消按钮会调用另一个端点,例如 Cancel (inspired ;) ),该端点调用您 tokenSource 上的 Cancel() 方法。(CancellationTokenSource 有一个用于 CopyToAsync 调用的 Token 属性)
问候,贝努瓦。
ps:如果您想在多个文件上拥有多个用户,您可能希望在请求中存储一些唯一的 id。
基于@greggz 和@Liam 评论进行编辑:您还应该将您的HTTP 端点移动到异步端点:)
推荐阅读
- python - 在导入tensorflow的过程中,每次都会出现这个错误。我确实尝试卸载然后再次安装。它仍然给出同样的错误
- html - 在没有最大宽度的情况下右对齐图像
- encryption - 公司如何更改其加密密钥?
- python-3.x - Python:如何获取文件路径的最后 n 个元素
- python - 附加字典数组
- c++ - MinGW 上的 GCC:libcurl 中不支持或禁用协议“https”
- java - POJO 的 ArrayList 未保存在所有设备共享首选项上
- python-3.x - 将 pyspark 数据帧写入雪花表时出错 [snowflake-cloud-data-platform]
- flutter - 如何删除 SliverAppBar 中的空白空间?
- python - 如何返回命令行