gpt4 book ai didi

php - 将 zip 文件上传到 PHP 上传站点不起作用,但适用于 mac

转载 作者:行者123 更新时间:2023-11-28 00:03:06 25 4
gpt4 key购买 nike

我有两个完全相同的文件。 Test.zip,两者大小相同。该文件是在我的 Mac 上创建的,可以很好地与我的上传脚本一起使用。我在我的 Windows 机器上制作了第二个 Test.zip 并尝试上传,但没有。

这是为什么?

所有文件类型都在索引和上传中正确列出,并且没有文件大小。我可以从我的 mac 上传 zip 文件,而不是我的 XP 机器。我可以从 Windows 上传除 rar/zip 之外的所有其他格式。

index.html 类型

   acceptedTypes = {
'image/png': true,
'image/jpeg': true,
'image/gif': true,
'application/x-rar-compressed': true,
'application/zip': true,
'application/octet-stream': true
},

index.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<style>
.hidden {
display: none;
}
#holder {
margin-bottom: 20px;
border: 10px dashed #ccc;
min-height: 300px;
width: 300px;
}
#holder.hover {
border-color: #0c0;
}
</style>
</head>
<body>

<div id="holder"></div>
<p id="upload" class="hidden"><label>Drag &amp; drop not supported, but you can still upload via this input field:<br><input type="file"></label></p>
<p id="filereader">File API &amp; FileReader API not supported</p>
<p id="formdata">XHR2's FormData is not supported</p>
<p id="progress">XHR2's upload progress isn't supported</p>
<p>Upload progress: <progress id="uploadprogress" min="0" max="100" value="0">0</progress></p>

<script>
var holder = document.getElementById('holder'),
tests = {
filereader: typeof FileReader != 'undefined',
dnd: 'draggable' in document.createElement('span'),
formdata: !!window.FormData,
progress: "upload" in new XMLHttpRequest
},
support = {
filereader: document.getElementById('filereader'),
formdata: document.getElementById('formdata'),
progress: document.getElementById('progress')
},
acceptedTypes = {
'image/png': true,
'image/jpeg': true,
'image/gif': true,
'application/x-rar-compressed': true,
'application/zip': true,
'application/octet-stream': true
},
progress = document.getElementById('uploadprogress'),
fileupload = document.getElementById('upload');

"filereader formdata progress".split(' ').forEach(function (api) {
if (tests[api] === false) {
support[api].className = 'fail';
} else {
// FFS. I could have done el.hidden = true, but IE doesn't support
// hidden, so I tried to create a polyfill that would extend the
// Element.prototype, but then IE10 doesn't even give me access
// to the Element object. Brilliant.
support[api].className = 'hidden';
}
});

function previewfile(file) {
if (tests.filereader === true && acceptedTypes[file.type] === true) {
var reader = new FileReader();
reader.onload = function (event) {
var image = new Image();
image.src = event.target.result;
image.width = 250; // a fake resize
holder.appendChild(image);
};

reader.readAsDataURL(file);
} else {
holder.innerHTML += '<p>Uploaded ' + file.name + ' ' + (file.size ? (file.size/1024|0) + 'K' : '');
console.log(file);
}
}

function readfiles(files) {
debugger;
var formData = tests.formdata ? new FormData() : null;
for (var i = 0; i < files.length; i++) {
if (tests.formdata) formData.append('file', files[i]);
previewfile(files[i]);
}

// now post a new XHR request
if (tests.formdata) {
var xhr = new XMLHttpRequest();
xhr.open('POST', 'upload.php');
xhr.onload = function() {
progress.value = progress.innerHTML = 100;
};

if (tests.progress) {
xhr.upload.onprogress = function (event) {
if (event.lengthComputable) {
var complete = (event.loaded / event.total * 100 | 0);
progress.value = progress.innerHTML = complete;
}
}
}

xhr.send(formData);
}
}

if (tests.dnd) {
holder.ondragover = function () { this.className = 'hover'; return false; };
holder.ondragend = function () { this.className = ''; return false; };
holder.ondrop = function (e) {
this.className = '';
e.preventDefault();
readfiles(e.dataTransfer.files);
}
} else {
fileupload.className = 'hidden';
fileupload.querySelector('input').onchange = function () {
readfiles(this.files);
};
}

</script>


</body>
</html>

上传.php

<?php
$allowedExts = array("gif", "jpeg", "jpg", "png", "rar", "zip");
$temp = explode(".", $_FILES["file"]["name"]);
$extension = end($temp);
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/jpg")
|| ($_FILES["file"]["type"] == "image/pjpeg")
|| ($_FILES["file"]["type"] == "image/x-png")
|| ($_FILES["file"]["type"] == "application/x-rar-compressed")
|| ($_FILES["file"]["type"] == "application/octet-stream")
|| ($_FILES["file"]["type"] == "application/zip")
|| ($_FILES["file"]["type"] == "image/png"))

&& in_array($extension, $allowedExts))
{
if ($_FILES["file"]["error"] > 0)
{
echo "Return Code: " . $_FILES["file"]["error"] . "<br>";
}
else
{
echo "Upload: " . $_FILES["file"]["name"] . "<br>";
echo "Type: " . $_FILES["file"]["type"] . "<br>";
echo "Size: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br>";

if (file_exists("upload/" . $_FILES["file"]["name"]))
{
echo $_FILES["file"]["name"] . " already exists. ";
}
else
{
move_uploaded_file($_FILES["file"]["tmp_name"],
"upload/" . $_FILES["file"]["name"]);
echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
}
}
}
else
{
echo "Invalid file";
}
?>

最佳答案

上传 Windows 压缩 ZIP 时,$_FILES["file"]["type"] 的值是多少?可能是 mimetype 问题。当其他理智的世界使用 application/octet-stream 时,Microsoft 倾向于使用 application/octet

一般来说,最好做一个变量转储发布来调试这样的事情。建议将它放在 upload.php 的顶部附近,以查看实际传递的内容:

echo '<pre>';
print_r($_FILES);
echo '</pre>';

关于php - 将 zip 文件上传到 PHP 上传站点不起作用,但适用于 mac,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20252029/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com