Compressor.js - 通过正常的表单提交上传图片(没有 Ajax)
Compressor.js - Upload image via normal form submission (no Ajax)
我在上传之前使用以下脚本在客户端压缩图像:
https://github.com/fengyuanchen/compressorjs
我可以使用以下代码通过 Ajax 上传图片:
// Following is a form with #name and #image input fields and #submit button:
var formData = new FormData();
$('#image').change(function(e) {
var img = e.target.files[0];
new Compressor(img, {
quality: 0.8,
maxWidth: 1600,
maxHeight: 1600,
success(result) {
formData.append('image', result, result.name);
},
});
});
$('#submit').click(function() {
formData.append('name', $('#name').val());
$.ajax({
type: 'POST',
url: 'form-script.php',
data: formData,
contentType: false,
processData: false
}).done(function() {
});
});
我需要通过正常的表单提交上传图片 - 否 Ajax-,但我做不到。我问的是如何在下面的代码中使用result,这样在提交表单的时候会提交压缩图片。作为旁注,我使用 PHP 服务器端。
$('#image').change(function(e) {
var img = e.target.files[0];
new Compressor(img, {
quality: 0.7,
maxWidth: 1200,
maxHeight: 1200,
success(result) {
// ??
},
});
});
谢谢。
经过进一步的研究和尝试,我找到了如何 post 没有 Ajax 的压缩图像,使用以下方法:
表格:
<form id="form" action="" method="post" enctype="multipart/form-data">
<input type="text" id="name" name="name">
<input type="file" id="image">
<!-- A hidden input is needed to put the image data after compression. -->
<input type="hidden" id="image-temp" name="image">
<input type="submit" name="submit" value="Submit">
</form>
图片压缩:
$('#image').change(function(e) {
var img = e.target.files[0];
new Compressor(img, {
quality: 0.8,
maxWidth: 1600,
maxHeight: 1600,
success(result) {
var reader = new FileReader();
reader.readAsDataURL(result);
reader.onloadend = function() {
var base64data = reader.result;
$('#image-temp').val(base64data);
}
},
});
});
服务器端(PHP):
if (isset($_POST['submit'])) {
/* Get other form data as usual. */
$name = $_POST['name'];
if (!empty($_POST['image'])) {
file_put_contents('images/image.jpg', file_get_contents($_POST['image']));
}
}
根据需要使用您想要的目录 (images/) 和文件名 (image.jpg)。
对于多张图片,JS部分使用HTML/CSS类,PHP部分使用循环
我在上传之前使用以下脚本在客户端压缩图像:
https://github.com/fengyuanchen/compressorjs
我可以使用以下代码通过 Ajax 上传图片:
// Following is a form with #name and #image input fields and #submit button:
var formData = new FormData();
$('#image').change(function(e) {
var img = e.target.files[0];
new Compressor(img, {
quality: 0.8,
maxWidth: 1600,
maxHeight: 1600,
success(result) {
formData.append('image', result, result.name);
},
});
});
$('#submit').click(function() {
formData.append('name', $('#name').val());
$.ajax({
type: 'POST',
url: 'form-script.php',
data: formData,
contentType: false,
processData: false
}).done(function() {
});
});
我需要通过正常的表单提交上传图片 - 否 Ajax-,但我做不到。我问的是如何在下面的代码中使用result,这样在提交表单的时候会提交压缩图片。作为旁注,我使用 PHP 服务器端。
$('#image').change(function(e) {
var img = e.target.files[0];
new Compressor(img, {
quality: 0.7,
maxWidth: 1200,
maxHeight: 1200,
success(result) {
// ??
},
});
});
谢谢。
经过进一步的研究和尝试,我找到了如何 post 没有 Ajax 的压缩图像,使用以下方法:
表格:
<form id="form" action="" method="post" enctype="multipart/form-data">
<input type="text" id="name" name="name">
<input type="file" id="image">
<!-- A hidden input is needed to put the image data after compression. -->
<input type="hidden" id="image-temp" name="image">
<input type="submit" name="submit" value="Submit">
</form>
图片压缩:
$('#image').change(function(e) {
var img = e.target.files[0];
new Compressor(img, {
quality: 0.8,
maxWidth: 1600,
maxHeight: 1600,
success(result) {
var reader = new FileReader();
reader.readAsDataURL(result);
reader.onloadend = function() {
var base64data = reader.result;
$('#image-temp').val(base64data);
}
},
});
});
服务器端(PHP):
if (isset($_POST['submit'])) {
/* Get other form data as usual. */
$name = $_POST['name'];
if (!empty($_POST['image'])) {
file_put_contents('images/image.jpg', file_get_contents($_POST['image']));
}
}
根据需要使用您想要的目录 (images/) 和文件名 (image.jpg)。
对于多张图片,JS部分使用HTML/CSS类,PHP部分使用循环