无法在服务器中打开上传的文件

Posted

技术标签:

【中文标题】无法在服务器中打开上传的文件【英文标题】:Can not open uploaded file in server 【发布时间】:2019-11-26 02:50:42 【问题描述】:

背景

用户上传图片并点击“保存”按钮。

我已成功将图像保存在服务器中。我给了 777 文件夹权限....

问题

我尝试打开图片,但无法正常显示:Image url

HTML

<button class ="save" onclick="test()">Save image to server</button>

脚本

function test()
var canvas  = document.getElementById("0");
var dataURL = canvas.toDataURL();  // THE BASE 64 DATA
var dataFileName = document.getElementById('fileup').value.replace(/.*(\/|\\)/, ''); // GET THE FILE NAME THAT USER CHOSE
var dataFileType = dataFileName.split('.').pop();

$.ajax(
  type: "POST",
  url: "tamaker.php",
  data:  
     imgBase64: dataURL,
     imgFileName: dataFileName,
     imgFileType: dataFileType
  
).done(function(o, imgFileName) 

  console.log(o);  
  var response = JSON.parse(o);
  console.log(response);

  $('body').prepend('<img src="' + dataFileName+ '" style="height: 200px; width: auto;">');

);

save.php

<?php

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

if( isset($_POST['imgBase64']) && isset($_POST['imgFileName']) && isset($_POST['imgFileType']) )

    $fname = filter_input(INPUT_POST, 'imgFileName'); // THE FILENAME THE USER CHOSE IS RECEIVED VIA POST
    $img = filter_input(INPUT_POST, 'imgBase64');  // THE BASE64 ENCODING RECEIVED VIA POST
    $imgtype = filter_input(INPUT_POST, 'imgFileType');  // THE FILE TYPE / EXTENSION IS RECEIVED VIA POST

    // STRIP OFF THE BEGINNING OF THE BASE64 DATA, BUT DEPENDS ON THE IMAGE TYPE.  
    // I COULD HAVE SIMPLIFIED THIS BUT USED IF STATEMENTS.
    if ( $imgtype === 'png')
        $img = str_replace('data:image/png;base64,', '', $img);
    ;
    if ( $imgtype === 'jpg' || $imgtype === 'jpeg')
        $img = str_replace('data:image/jpeg;base64,', '', $img);
    ;
    if ( $imgtype === 'gif')
        $img = str_replace('data:image/gif;base64,', '', $img);
    ;

    // REPLACE ALL SPACES IN THE IMAGE DATA WITH PLUS SYMBOL
    $img = str_replace(' ', '+', $img); 
    // CONVERT THE DATA FROM BASE64 ENCODING
    $img = base64_decode($img); 

    // SAVE THE FILE WITH NAME SYNTAX OF:  /images/clientlogos/[ACCOUNT ID]_[FILE NAME]
    file_put_contents('/var/www/html/ecom1/site/test/screen/'.$fname, $img);

    echo "Image has been saved successfully!<p>";

?>

这是pastebin中的完整html代码

【问题讨论】:

【参考方案1】:

尝试将您的 apache 版本更新到 2.4。

这个家伙成功了:https://***.com/a/33033946/11722161

【讨论】:

谢谢,这是我们的 apache 版本:i.imgur.com/BotJunW.png = 2.4.18....我还需要升级吗? 我会尝试支持您当前 PHP 版本的任何 Apache 版本。 @vickeycolors【参考方案2】:

您应该尝试将文件/目录的所有权更改为www-data

仅针对文件使用进行更改:

chown www-data:www-data YOURFILE

要更改目录中的所有文件,请改用以下命令:

chown -R www-data:www-data YOURDIRECTORY/

这对我有用很多次。

【讨论】:

以上是关于无法在服务器中打开上传的文件的主要内容,如果未能解决你的问题,请参考以下文章

10.15.7网页无法上传Excel文件

网站FTP服务器中的web文件夹为何打不开,无法上传修改网站内容,请高手指点,多谢,急!!!!!!

在win7下访问FTP时无法上传文件

以字节数组上传到服务器的映像损坏(无法打开图像)

PHP - 使用正确的 MIME 类型打开上传的 DOCX 文件

[FE] 用 FormData 上传多个文件到 MultipartFile[] 接口