【发布时间】:2020-05-08 14:03:02
【问题描述】:
PHP 收到一个上传文件的 post 请求。 print_r($_FILES); 输出以下内容:
Array
(
[resource] => Array
(
[name] => test.log
[type] => application/octet-stream
[tmp_name] => /tmp/php2O7WQy
[error] => 0
[size] => 6136
)
)
使用 PHP,我将各种请求数据作为字符串回显到页面。
我还在页面中添加了以下 JavaScript:
var uri = document.getElementById("uri").textContent;
var body = document.getElementById("body").textContent;
var files = document.getElementById("files").textContent;
var headers = JSON.parse(document.getElementById("headers").textContent);
var contentType = document.getElementById("contentType").textContent;
var xhttp = new XMLHttpRequest();
xhttp.open(method, uri);
for (var name in headers) {
for (var i = 0; i < headers[name].length; i++) {
console.log(name, headers[name][i]);
xhttp.setRequestHeader(name, headers[name][i]);
}
}
if(contentType) xhttp.setRequestHeader("Content-Type", contentType);
var parsedFiles=JSON.parse(files);
if(typeof parsedFiles.resource !=='undefined') {
console.log(JSON.stringify(parsedFiles)); //{"resource":{"name":"test.log","type":"application/octet-stream","tmp_name":"/tmp/php2O7WQy","error":0,"size":6136}}
var formData = new FormData();
formData.append('resource', parsedFiles.resource.tmp_name, parsedFiles.resource.name);
xhttp.send(formData);
}
else {
xhttp.send(body);
}
xhttp.onreadystatechange = function() {
if (this.readyState == 4) {
document.getElementById('output').innerHTML=xhttp.responseText;
}
};
但是,当服务器收到 XMLHttpRequest 时,$_FILES 为空。
如果我知道文件 tmp_name,如何生成 XMLHttpRequest 以便服务器使用该文件?作为替代方案,我应该将文件保存为页面上的 blob 字符串并发送吗?
【问题讨论】:
-
只要在 SO 上搜索。你不是第一个想用
XMLHttpRequest提交文件的人
标签: javascript php xmlhttprequest