Javascript 如何从外部脚本中止XMLHttpRequest.upload? 作为后续行动:
当使用PhP通过AJAX上传文件时,通常会执行以下操作(我是新手,请告诉我是否有更好的方法):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,而不是让
- 有一个带有表单和javascript的文件,您可以在其中设置并发送
,例如upload\u form.phpXMLHttpRequest
- 使用另一个外部php文件来处理上传请求,例如upload.php
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
请求更安全;始终必须有一个中间件身份验证系统来相应地检查和允许/拒绝这些请求。