首页 > 解决方案 > Post 将文件名保存为数组;jpg 而不是输入名称

问题描述

尝试使用输入框中的名称将 jpg 文件保存到服务器,但保存为 Array.jpg

html文件内容:

<input type="text" name="datepicker" id="datepicker">

php文件内容:

$image = $_POST['image'];

$location = "upload/";

$image_parts = explode(";base64,", $image);

$image_base64 = base64_decode($image_parts[1]);

$filename = ['datepicker'].'.jpg';
echo $_REQUEST['datepicker'];

$file = $location . $filename;

file_put_contents($file, $image_base64);

来自 html 的脚本:

<script type='text/javascript'>
function screenshot(){
  html2canvas(document.body).then(function(canvas) {

    // Get base64URL
    var base64URL = canvas.toDataURL('image/jpeg').replace('image/jpeg', 'image/octet-stream');

    // AJAX request
    $.ajax({
       url: 'ajaxfile.php',
       type: 'post',
       data: {image: base64URL},
       success: function(data){
       console.log('Upload successfully');
       }
    });
  });
}
</script>

没有错误消息,只是用错误的名称保存。

现在已经尝试过:

$filename = ['datepicker']; - saves as: Array (no extension).  
$filename = $_POST['datepicker']; (nothing gets saved at all).   
$filename = $_POST['datepicker'].'.jpg'; (saves as .jpg (just extension, no file name).   
$filename = $_FILES['datepicker']['name'];  (nothing gets saved at all).   
$filename = $datepicker;   (nothing gets saved at all).   
$filename = "screenshot_".uniqid().'.jpg'; saved as screenshot_5d40158a1dad5.jpg

在我看来,表单名称字段 datepicker 对 php 文件根本不可用。也许这是因为对 php 文件的调用(或您调用的任何名称)都包含在 javascript 标签中?我不知道。只是在 24 小时试图让它发挥作用后感到沮丧。

我想我必须将表单名称字段 datepicker 传递给 ajax 代码,然后在 php 文件中使用它。任何人都知道如何修改我的代码来做到这一点?

我现在已经解决了这个问题。我不得不修改 html 中的 javascript 以在文本输入框中包含一个带有 vale 的 var,并更新 ajax 以将其包含在数据行中。

<script type='text/javascript'>
function screenshot(){
  html2canvas(document.body).then(function(canvas) {

    // Get base64URL
    var base64URL = canvas.toDataURL('image/jpeg').replace('image/jpeg', 'image/octet-stream');
    var val1 = $('#datepicker').val();

    // AJAX request
    $.ajax({
       url: 'ajaxfile.php',
       type: 'post',
       //data: {image: base64URL, name: datepicker},
       data: {image: base64URL, datepicker: val1},
       success: function(data){
       console.log('Upload successfully');
       }
    });
  });
}
</script>

然后我必须用文件名更新 php 文件,以在文件名中包含表单中的 txt 数据:

<?php 

$image = $_POST['image'];

$location = "upload/";

$image_parts = explode(";base64,", $image);

$image_base64 = base64_decode($image_parts[1]);

$filename = $_POST['datepicker'].'.jpg';

$file = $location . $filename;

file_put_contents($file, $image_base64);

?>

标签: phppostuser-input

解决方案


您使用的不是在 PHP 中存储文件的好方法。

在存储图像之前,您应该在图像名称前加上当前日期和一些由 PHP 生成的随机数,因为如果要将两个图像存储在服务器上的同一个文件夹中,则第一个图像将被覆盖,而第二个文件将被存储在其位置,从而使第一个完全消失的图像

尝试为您的图像文件添加前缀“ date('Ymdhis').rand(100000,999999)”并使用$_FILES['something']['name']and$_FILES['something']['tmp_name']分别获取图像的名称和临时名称来存储图像


推荐阅读