HTTP文件上载适用于1个文件,但没有其他文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HTTP文件上载适用于1个文件,但没有其他文件相关的知识,希望对你有一定的参考价值。

我正在一个使用数据库获取产品图像的网站上工作。一切正常,所以我想制作一个页面,轻松地将图像文件从我的本地桌面传输到我的ftp.server。现在这个奇怪的事情发生了,我无法弄清楚为什么。

在测试阶段,我继续尝试使用一个特定的文件“haircut.jpg”。只需一张随机图片即可下载。一段时间后,页面工作,我可以将该文件“haircut.jpg”上传到我的ftp服务器。

现在我想开始使用该页面将更多图像上传到我的ftp服务器,但只有图像“haircut.jpg”才有效。我尝试的每个其他图像都失败了,它给了我下一个错误:

警告:ftp_put(kabouter.jpg):无法打开流:没有这样的文件或目录...

我真的不知道这可能是什么。我从我的ftp-server中删除了“haircut.jpg”文件,但我可以一次又一次地上传它,它总是有效的。我试过用另一个浏览器;同样的问题还在继

其他文件在EXACT相同的文件夹中,大小相同(我尝试越来越大)。我用.jpg尝试了其他文件。我试过其他文件夹。不工作,只是一个特定的“haircut.jpg”工作。

我用于ftp-transfer的所有代码如下:

//FTP:
$ftp_server = "ftpserver";
$ftp_username = "username";
$ftp_userpass = "password";
$remote_dir = "/test/";

$target_file = $remote_dir.basename($_FILES['afbeelding']["name"]);
$uploadOk = 1;
$imageFileType = pathinfo($target_file, PATHINFO_EXTENSION);

//Setup basic connection
//ftp_connect(host, port [def=21], timeout [def=90])
$ftpConn = ftp_connect($ftp_server) or die("Could not connect to $ftp_server");
$login = ftp_login($ftpConn, $ftp_username, $ftp_userpass);

我认为下一段代码不会导致问题,但无论如何我都会发布:

//Check if image file is a actual image or fake image
if(isset($_POST["submit"]))
{
    $check = getimagesize($_FILES['afbeelding']["name"]);
    if($check !== false){
        echo "File is an image - " . $check["mime"] . ".";
        $uploadOk = 1;
    }
    else{
        echo "File is not an image.";
        $uploadOk = 0;
    }
}
//Check if file already exists
if(in_array(basename($_FILES['afbeelding']["name"]), ftp_nlist($ftpConn, $remote_dir)))
{
    echo "Sorry, file already exists.";
    $uploadOk = 0;
}

//Check file size
if($_FILES['afbeelding']["size"] > 3000000)
{
    echo "Sorry, your file is too large.";
    $uploadOk = 0;
}

//Allow certain file formats
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg" && $imageFileType != "gif")
{
    echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed.";
    $uploadOk = 0;
}

这是FTP传输实际发生的:

//Check if $uploadOk is set to 0 by an error
if($uploadOk == 0){
    echo "<br>Sorry, your file was not uploaded.";
}

//If everything is OK, try to upload the file
else
{
    //Check if ftp transfer was succesfull
    if(ftp_put($ftpConn, $target_file, basename($_FILES['afbeelding']["name"]), FTP_ASCII )){
        echo "The file ". basename($_FILES['afbeelding']["name"]). " has been uploaded.";
    }
    else {
        "Sorry, there was an error uploading your file.";
    }
}

//Remember to always close the ftp connection
ftp_close($ftpConn);

我希望有人认识到这个问题并且能够帮助我。我现在很无能为力。

答案

"name"数组的$_FILES元素不包含您可以阅读的文件的名称!它是用户客户端计算机上的文件名,而不是服务器上的名称。

上载文件暂时存储在服务器上的文件的文件名位于"tmp_name"元素中。

您必须在php文件所在的文件夹中包含一些遗忘的"haircut.jpg"副本。

只需用"name"(随机名称)替换用于访问该文件的"tmp_name"的所有实例。保持(漂亮)"name",你处理FTP路径。

有关$_FILES的结构,请参阅POST method uploads

以上是关于HTTP文件上载适用于1个文件,但没有其他文件的主要内容,如果未能解决你的问题,请参考以下文章

plupload 似乎没有在 IE 9 中上传文件。它适用于其他浏览器

Asp.net http 处理程序文本文件下载问题。适用于代码隐藏

WebView中的文件上载

iOS 不会在一台设备上请求 AASA 文件,但适用于所有其他设备

Bootstrap 4 和 Rails 6:$(...).modal 不是“.js.erb”文件中的函数(但适用于其他 .js 文件?)[关闭]

适用于 MATLAB 独立可执行文件的 MCR 8.1