Javascript 如何从外部脚本中止XMLHttpRequest.upload? 作为后续行动:

Javascript 如何从外部脚本中止XMLHttpRequest.upload? 作为后续行动:,javascript,php,ajax,file-upload,xmlhttprequest,Javascript,Php,Ajax,File Upload,Xmlhttprequest,当使用PhP通过AJAX上传文件时,通常会执行以下操作(我是新手,请告诉我是否有更好的方法): 有一个带有表单和javascript的文件,您可以在其中设置并发送XMLHttpRequest,例如upload\u form.php 使用另一个外部php文件来处理上传请求,例如upload.php 我的问题是: 是否可以从external upload.php文件中的中止XMLHttpRequest? 这样做的原因是,如果服务器上已经存在该文件,我希望中止XMLHttpRequest,而不是让

当使用PhP通过AJAX上传文件时,通常会执行以下操作(我是新手,请告诉我是否有更好的方法):

  • 有一个带有表单和javascript的文件,您可以在其中设置并发送
    XMLHttpRequest
    ,例如upload\u form.php
  • 使用另一个外部php文件来处理上传请求,例如upload.php
我的问题是: 是否可以从external upload.php文件中的中止XMLHttpRequest?

这样做的原因是,如果服务器上已经存在该文件,我希望中止
XMLHttpRequest
,而不是让用户等到上传完成后才知道失败


一些图片说明问题: 为了夸大问题,我在“网络”选项卡中限制了速度

用户上载服务器上上载目录中不存在的文件:

用户上传服务器上上传目录中存在的文件:

一些说明问题的代码: upload\u form.php:



const upload_form=document.getElementById('upload_form'); var file_to_upload=document.getElementById('file_to_upload'); 上传表单。添加文件列表(“提交”,上传文件); 函数上传文件(e){ e、 预防默认值(); const xhr=new XMLHttpRequest() open(“POST”、“upload.php”); xhr.upload.addEventListener(“进度”,e=>{ 常数百分比=e.Length可计算?(e.loaded/e.total)*100:0; console.log(固定百分比(0)+“%”; }); //========================问题的主要部分=================== //如果文件存在,我可以从upload.php强制触发此命令吗? xhr.addEventListener(“中止”,e=>{ 控制台日志(e); }); // =========================================================== xhr.onreadystatechange=函数(){ if(this.readyState==4&&this.status==200){ //在此更新一些响应区域 } }; 发送(新表单数据(上传表单)); }
upload.php:



我曾尝试在upload\u form.php中检查
readyState
status
的不同组合,但这没有帮助。

当php代码开始时,文件已完全上载,因此没有必要以这种方式中止,也就是简单地返回消息。相反,您可以在上传AJAX之前进行调用,检查文件是否存在,并且只有在文件不存在的情况下,才能上传文件,或者向用户发送有关文件的消息

使用以下代码创建一个简单的
exists.php
{
如果(存在){
//如果它存在,则向用户发送有关它的消息,而不执行其他操作
message.textContent=`File“${File_to_upload.files[0].name}已存在`;
}否则{
//如果不存在,请上载该文件
const xhr=new XMLHttpRequest();
open(“POST”、“upload.php”);
xhr.upload.addEventListener(“进度”,e=>{
常数百分比=e.Length可计算?(e.loaded/e.total)*100:0;
console.log(固定百分比(0)+“%”;
});
xhr.onreadystatechange=函数(){
if(this.readyState==4&&this.status==200){
//在此更新一些响应区域
message.textContent=this.responseText;
}
};
发送(新表单数据(上传表单));
}
});
}

回答得很好。我才刚刚开始学习javascript中的
Promise
对象,所以很高兴看到它们在与我自己的问题直接相关的上下文中使用。你能评论一下在你的服务器上使用
存在的.php
脚本是否有任何安全隐患吗是否有人在附近窥探使用它的文件?承诺是非常强大的,你应该投入时间来了解它们如何工作以及何时可以使用它们。这两个PHP文件,不仅是
存在。PHP
,而且
上传。PHP
是完全不安全的,不应该像现在这样使用;相反,你必须创建一个authenti阳离子系统(或使用一些现成的认证系统)这将处理登录会话,只允许他们已登录并有权上载的用户,只允许他们检查应该有权访问的文件和文件夹。
GET
如果有一个后端身份验证系统来检查用户和访问权限,则请求完全没有问题。没有什么特别的原因使
POST
请求比
GET
请求更安全;始终必须有一个中间件身份验证系统来相应地检查和允许/拒绝这些请求。