php js 跨域上传文件 (问:如何使用php和js进行跨域文件上传?)
跨域文件上传是指在网页前端使用JavaScript与后端服务器进行文件上传时,前端所在域与后端所在域不同的情况。由于浏览器的同源策略,这样的上传方式会被浏览器阻止。因此,需要采用一些解决方案来完成跨域文件上传,并且最常见的解决方案是使用PHP和JavaScript。
PHP与JavaScript是一对配合默契的技术,通过PHP实现后端上传文件,再通过JavaScript预览、提交表单等操作,实现文件上传。在跨域文件上传中,PHP主要起到处理文件的功能,而JavaScript在前端预览和上传文件后,向后端传送数据。
下面是如何使用PHP和JavaScript进行跨域文件上传:
1.在前端,使用input标签来创建文件选择框,设置属性multiple为true,即可实现同时选择多个文件。然后,将所选文件传递给后端。
“`html
“`
“`javascript
function onChangeFile(event) {
let files = event.target.files;
let formData = new FormData();
for (let i = 0; i < files.length; i++) {
formData.append(“file[]”, files[i]);
}
formData.append(“domain”, “http://www.example.com”);
formData.append(“username”, “admin”);
// 省略一些其他属性
// 将formData传递给后端
}
function upload() {
let xhr = new XMLHttpRequest();
xhr.open(“POST”, “http://www.example.com/upload.php”, true);
xhr.onreadystatechange = function() {
if (xhr.readyState === 4 && xhr.status === 200) {
console.log(xhr.responseText);
}
};
xhr.send(formData);
}
“`
2.在后端,使用PHP编写文件上传代码。首先,处理文件的基本信息,例如文件类型、大小、后缀等,并将这些信息存储在一个数组里。然后,循环处理每一个上传文件,使用moveuploadedfile函数实现文件上传。
“`php
if (isset($FILES[“file”])) {
$domain = $POST[“domain”];
$username = $_POST[“username”];
// 省略一些其他属性
$fileInfos = array();
$files = $_FILES["file"];
for ($i = 0; $i < count($files["name"]); $i++) {
$fileInfo = array();
$fileInfo["name"] = $files["name"][$i];
$fileInfo["type"] = $files["type"][$i];
$fileInfo["tmp_name"] = $files["tmp_name"][$i];
$fileInfo["size"] = $files["size"][$i];
$fileInfo["error"] = $files["error"][$i];
$fileInfo["ext"] = pathinfo($fileInfo["name"], PATHINFO_EXTENSION);
$fileInfo["username"] = $username;
$fileInfo["domain"] = $domain;
$fileInfos[] = $fileInfo;
}
foreach ($fileInfos as $fileInfo) {
$fileName = $fileInfo["name"];
$tmpName = $fileInfo["tmp_name"];
$savePath = "/save/path/" . $fileName;
$result = move_uploaded_file($tmpName, $savePath);
if ($result) {
echo "上传成功";
} else {
echo "上传失败";
}
}
}
“`
以上就是使用PHP和JavaScript进行跨域文件上传的具体步骤,可以通过此方法轻松地实现跨域文件上传。同时,需要注意的是,由于涉及文件上传,需要做好安全措施,防止恶意攻击和非法操作。