保存和上传数据:图像/jpeg;base64字符串为jpg文件,表示其太大



我有一个页面,让用户显示要上传的选定图像,并将其显示在适当的位置,以便首先预览。它将其读取为readAsDataURL。我可以将数据保存到一个文本字符串中,并可以使用getJSON或AJAX上传,但不断收到错误,说它太大了?我曾尝试将其作为文件上传,但随后失去了先预览图像的功能。

一旦上传到PHP中,我可以调整图像的大小并做我需要的事情,但我很难让任何超过5K的图像被接受。

我画了一支钢笔,https://codepen.io/julianchamberlain/pen/PoKLvqg

我以前没有用过这个,所以如果我做错了什么或没有解释清楚,我道歉。

我正在加载这样的显示图像:

function readURL(input) {
if (input.files && input.files[0]) {
var reader = new FileReader();
reader.onload = function(e) {
$('#imagePreview').css('background-image', 'url('+e.target.result +')');
$('#imagePreview').hide();
$('#imagePreview').fadeIn(650);     
$('#new_img').val(e.target.result);
}
reader.readAsDataURL(input.files[0]);
}
}
$("#imageUpload").change(function() {
readURL(this);
});
function saveimg(data) {

var new_data={ 
new_img : data.new_img
};


$.getJSON('upload.php', new_data);
alert("uploaded");
body {
background: whitesmoke;
font-family: 'Open Sans', sans-serif;
}
.container {
max-width: 960px;
margin: 30px auto;
padding: 20px;
}
h1 {
font-size: 20px;
text-align: center;
margin: 20px 0 20px;
}
h1 small {
display: block;
font-size: 15px;
padding-top: 8px;
color: gray;
}
.avatar-upload {
position: relative;
max-width: 205px;
margin: 50px auto;
}
.avatar-upload .avatar-edit {
position: absolute;
right: 12px;
z-index: 1;
top: 10px;
}
.avatar-upload .avatar-edit input {
display: none;
}
.avatar-upload .avatar-edit input + label {
display: inline-block;
width: 34px;
height: 34px;
margin-bottom: 0;
border-radius: 100%;
background: #FFFFFF;
border: 1px solid transparent;
box-shadow: 0px 2px 4px 0px rgba(0, 0, 0, 0.12);
cursor: pointer;
font-weight: normal;
transition: all 0.2s ease-in-out;
}
.avatar-upload .avatar-edit input + label:hover {
background: #f1f1f1;
border-color: #d6d6d6;
}
.avatar-upload .avatar-edit input + label:after {
content: "f040";
font-family: 'FontAwesome';
color: #757575;
position: absolute;
top: 10px;
left: 0;
right: 0;
text-align: center;
margin: auto;
}
.avatar-upload .avatar-preview {
width: 192px;
height: 192px;
position: relative;
border-radius: 100%;
border: 6px solid #F8F8F8;
box-shadow: 0px 2px 4px 0px rgba(0, 0, 0, 0.1);
}
.avatar-upload .avatar-preview > div {
width: 100%;
height: 100%;
border-radius: 100%;
background-size: cover;
background-repeat: no-repeat;
background-position: center;
}
<meta name='viewport' content='initial-scale=1,maximum-scale=1,user-scalable=no' />
<script src='https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js'></script>
<link href="https://fonts.googleapis.com/css?family=Open+Sans:300" rel="stylesheet">
<script src="https://kit.fontawesome.com/788cff4036.js" crossorigin="anonymous"></script>
<div class="container">
<h1>jQuery Image Upload 
<small>with preview</small>
</h1>


<div class="avatar-upload">
<div class="avatar-edit">
<input type='file' id="imageUpload" accept=".png, .jpg, .jpeg" />
<label for="imageUpload"></label>
</div>
<div class="avatar-preview">
<div id="imagePreview" style="background-image: url(http://i.pravatar.cc/500?img=7);">
</div>
</div>
</div>
</div>
<input type='text' id='new_img' />
<button type="button" class="button" onclick="
var new_img = document.getElementById('new_img').value;
var data={new_img : new_img}; saveimg(data);
saveimg(data);">Save Image</button>

我将数据保存在文本输入中,并添加一个保存按钮,如:

<input type='text' id='new_img' />
<button type="button" class="button" onclick="
var new_img = document.getElementById('new_img').value;
var data={new_img : new_img}; saveimg(data);
saveimg(data);">Save Image</button>

为了发送数据,我使用了这个,但我也尝试过AJAX,但得到了相同或空的结果。

function saveimg(data) {

var new_data={ 
new_img : data.new_img
};

$.getJSON('upload.php', new_data);
alert("uploaded");

}

上传的php是:

$new_img = $_GET["new_img"];
$data = $new_img;
list($type, $data) = explode(';', $data);
list(, $data)      = explode(',', $data);
$data = base64_decode($data);
file_put_contents('img/operators/image.jpg', $data);
echo "done";

感谢的Andreas

我用一个帖子来代替:

$.ajax({
url: 'upload.php',
data: new_data,                                                                                                  
type: 'POST',
success: function(data){
alert("UPLOADED");
}
});

还将php文件更改为POST,而不是GET。

相关内容

最新更新