php - 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);
?>
解决方案
您使用的不是在 PHP 中存储文件的好方法。
在存储图像之前,您应该在图像名称前加上当前日期和一些由 PHP 生成的随机数,因为如果要将两个图像存储在服务器上的同一个文件夹中,则第一个图像将被覆盖,而第二个文件将被存储在其位置,从而使第一个完全消失的图像
尝试为您的图像文件添加前缀“ date('Ymdhis').rand(100000,999999)
”并使用$_FILES['something']['name']
and$_FILES['something']['tmp_name']
分别获取图像的名称和临时名称来存储图像
推荐阅读
- selenium - 如何在使用 selenium 库的机器人框架中解决“不推荐使用没有显式属性的'使用'获取元素属性'”
- javascript - 如何从隐藏或显示中获取值:使用 javascript 无输入
- git - 文件被部署到heroku,但是bash命令没有显示文件
- r - 使用 kableExtra 将分组变量与剥离/着色匹配
- c# - C#:如何拆分具有变化前缀的字符串
- ruby - 确定字符串的结尾是否与单独字符串的开头重叠
- css - CSS - 为什么隐藏 flexbox 的开头?以及如何解决保持项目居中的问题?
- facebook - 如何使用图形 API 获取 Facebook 相册的图像
- corda - Corda NodeDriver MissingContractAttachments for Cash 即使有要扫描的包集
- python - 如何更改 self.button 的状态