如何解决将较大的图像文件从 javascript XMLHttpRequest blob 上传到 php它保存了错误的大小
我正在尝试将 100MB 的较大图像文件上传到 php 服务器。 看起来像一个完整的文件上传(状态为200),但在服务器端文件大小错误,丢失了几个字节,并且在Web浏览器中没有显示为图像。
如何解决?
这里是 htmlp/javascript :
var file = document.getElementById("selectedfile").files[0];
var reader = new FileReader();
//reader.readAsBinaryString(file);
reader.readAsDataURL(file);
reader.onloadend = function(evt){
xhr = new XMLHttpRequest();
xhr.open("POST","uprx.php?filename="+document.getElementById("selectedfile").files[0].name,true);
XMLHttpRequest.prototype.mySendAsBinary = function(text){
var data = new ArrayBuffer(text.length);
var ui8a = new Uint8Array(data,0);
for (var i=0; i<text.length; i++) {
ui8a[i] = (text.charCodeAt(i)&0xff);
}
if (typeof window.Blob == "function") {
var blob = new Blob([data]);
}
else {
var bb = new (window.MozBlobBuilder || window.WebKitBlobBuilder || window.BlobBuilder)();
bb.append(data);
var blob = bb.getBlob();
}
this.send(blob);
}
var eventSource = xhr.upload || xhr;
eventSource.addEventListener("progress",function(e) {
var position = e.position || e.loaded;
var total = e.totalSize || e.total;
var percentage = Math.round((position/total)*100);
});
xhr.onreadystatechange = function() {
if (xhr.readyState == 4) {
if (xhr.status == 200) {
}
else {
// process error
}
}
};
xhr.mySendAsBinary(evt.target.result);
};
这里是php服务器:
$inputHandler = fopen("php://input","r");
$fileHandler = fopen($_GET["filename"],"w");
while(true) {
$buffer = fgets($inputHandler,4096);
if (strlen($buffer) == 0) {
fclose($inputHandler);
fclose($fileHandler);
return true;
}
$base64Image = trim($buffer);
$base64Image = str_replace('data:image/png;base64,','',$base64Image);
$base64Image = str_replace('data:image/jpg;base64,$base64Image);
$base64Image = str_replace('data:image/jpeg;base64,$base64Image);
$base64Image = str_replace('data:image/gif;base64,$base64Image);
//$base64Image = str_replace(' ','+',$base64Image);
$imageData = base64_decode($base64Image);
fwrite($fileHandler,$imageData);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。