我最近遇到了一个问题,我必须实现一个解决方案,在该解决方案中,用户可以上传文档,将其流式传输到服务器,并且无需存储在服务器上,而是将流发布到 SOAP 服务器。
我实现它的方式如下:
我想通过 AJAX 上传文件,以便显示上传进度。
这是我的解决方案(请注意,这一次只满足一个文件 - 但这可能是一个起点。)
JavaScript:
首先为 FormData 声明一个对象 - 这将用于与文件一起发送任何附加信息:
var formData = new FormData();
其次,附加您要发送到服务器的所有数据:
formData.append("documentDescription", $("#documentDescription textarea").val());
formData.append("afile", file.files[0]);
现在创建一个新的 XMLHttpRequest 实例:
var xhr = new XMLHttpRequest();
这是使一切正常工作的其余代码:
xhr.open("POST", "UploadDocumentURL", true);
xhr.upload.onprogress = function(e) {
if (e.lengthComputable) {
var percentComplete = (e.loaded / e.total) * 100;
$('.progress .bar').css('width', percentComplete + '%').attr('aria-valuenow', percentComplete);
}
}
xhr.onload = function() {
if (this.status == 200) {
var resp = JSON.parse(this.response);
if (resp.type === "error") {
notify.add(resp.type, "Error", resp.message, 3000, true);
} else {
notify.add(resp.type, "Success", resp.message, 3000);
}
}
;
};
xhr.send(formData);
PHP
$documentName = $_POST["documentDescription"];
$fileName = $_FILES['afile']['name'];
$fileType = $_FILES['afile']['type'];
$ext = pathinfo($fileName, PATHINFO_EXTENSION);
$fileName = pathinfo($fileName, PATHINFO_FILENAME);
$fileContent = file_get_contents($_FILES['afile']['tmp_name']);
您现在将在服务器上拥有二进制数据。
您应该能够通过file.files[0]
在 JavaScript 中循环来使其适用于多个文件。
希望您可以将此应用于您的问题。