จะให้ Ajax ส่งค่า enctype="multipart/form-data ยังไงครับพอดีติดปัญหาอ่ะครับ
คำค้น
javascript: convert image to base64encode
Date :
2018-03-06 15:07:59
By :
Chaidhanan
ตอบกว้างไปนิดครับพี่ 555+ ผมไปไม่ถูกกก พี่พอจะอธิบาย หรือมีตัวอย่างการทำไหมครับ ให้ศึกษา
ประวัติการแก้ไข 2018-03-06 19:31:13
Date :
2018-03-06 19:26:06
By :
teedesign
อ่อ..ครับผมเข้าไปดูแล้วครับ ยังไม่ใช่อ่ะครับพี คือต้องการจะอัฟโหลดรูปลงฐานข้อมูลปกติทั่วไปอ่ะครับ
แต่พอดีผมใช้ AJAX ส่งรูปอ่ะครับ รุปมันไม่เข้าฐานข้อมูลอ่ะครับ พอดีลงโค้ดไม่หมดต้องขออภัยครับ
html
<div id="myModal" class="modal fade" aria-labelledby="myModalLabel" aria-hidden="true" tabindex="-1" role="dialog">
<div class="modal-dialog">
<div class="modal-content">
<form method="post" action="<?php echo base_url('admin/Categories/add_category_validation');?>" enctype="multipart/form-data">
<div class="modal-header">
<h5 class="modal-title">เพิ่มหมวดอสังหาฯ</h5>
<button type="button" class="close" data-dismiss="modal" aria-hidden="true" onClick="window.location.reload()">×</button>
</div>
<div class="modal-body" id="myModalBody">
<div id="alert-msg"></div>
<div class="form-group">
<label for="name">Category</label>
<input class="form-control" id="name" name="name" type="text" value="" />
</div>
<div class="control-group">
<label for="exampleSelect1">Parent</label>
<div class="controls">
<select id="sub_category" class="form-control" name="sub_category">
<option></option>
<option value="0">Top Level Category</option>
<?php foreach ($categories as $cat): ?>
<option value="<?php echo $cat['id']; ?>"><?php echo $cat['name']; ?></option>
<?php endforeach; ?>
</select>
</div>
</div>
<div class="form-group">
<label for="exampleTextarea">Description</label>
<textarea class="form-control" id="textarea" name="textarea" rows="3"></textarea>
</div>
<div class="form-group">
<label for="exampleInputFile">Logo Category</label>
<input type="file" class="form-control-file" name="image_file" id="image_file">
<small id="fileHelp" class="form-text text-muted">This is some placeholder block-level help text for the above input. It's a bit lighter and easily wraps to a new line.</small> </div>
</div>
<div class="modal-footer">
<input class="btn btn-default" id="submit" name="submit" type="button" value="Send Mail" />
<button type="button" class="btn btn-danger float-left" data-dismiss="modal" onClick="window.location.reload()" />
Close
</button>
</div>
</form>
</div>
</div>
</div>
<!--load jquery & bootstrap js files-->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<script type="text/javascript">
$('#submit').click(function() {
var form_data = {
name: $('#name').val(),
sub_category: $('#sub_category').val(),
textarea: $('#textarea').val(),
image_file: $('#image_file').val()
};
$.ajax({
url: "<?php echo site_url('admin/Categories/add_category_validation'); ?>",
type: 'POST',
data: form_data,
success: function(msg) {
if (msg == 'YES')
$('#alert-msg').html('<div class="alert alert-success text-center">Your mail has been sent successfully!</div>');
else if (msg == 'NO')
$('#alert-msg').html('<div class="alert alert-danger text-center">Error in sending your message! Please try again later.</div>');
else
$('#alert-msg').html('<div class="alert alert-danger">' + msg + '</div>');
}
});
return false;
});
</script>
Controller
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Categories extends CI_Controller
{
var $session_user;
function __construct()
{
parent::__construct();
$this->session_user = $this->session->userdata('logged_in');
$this->load->library('facebook');
$this->load->library('googleplus');
$this->load->model('admin/Category_admin');
$this->load->library('form_validation');
}
/*------------------------------------------------------------------------------------------------------------------------------------*/
public function index()
{
if ($this->session->userdata('logged_in'))
{
$login = $this->session->userdata('logged_in');
if($login['type_user']=='administrator')
{
$data['categories'] = $this->Category_admin->category_get_all();
$data['title'] = 'Categories';
$data['session_user'] = $this->session_user;
$this->load->view('templates/header_administrator',$data);
$this->load->view('admin/categories',$data);
$this->load->view('templates/footer_administrator');
$this->load->view('admin/modal_category');
}
else
{
redirect(base_url('index'));
exit;
}
}
else
{
redirect(base_url('index'));
exit;
}
}
/*------------------------------------------------------------------------------------------------------------------------------------*/
public function add_category_validation()
{
$this->form_validation->set_rules('name','User Name','required');
$this->form_validation->set_rules('sub_category','sub_category','required');
$this->form_validation->set_rules('textarea','textarea','required');
if($this->form_validation->run()==FALSE)
{
echo $this->upload->display_errors();
}else{
if(isset($_FILES["image_file"]))
{
$config['upload_path'] = './upload/';
$config['allowed_types'] = 'jpg|jpeg|png|gif';
$config['file_name'] = date("dmYHis");
$this->load->library('upload', $config);
$this->upload->do_upload('image_file');
$data = $this->upload->data();
$config['image_library'] = 'gd2';
$config['source_image'] = './upload/'.$data["file_name"];
$config['create_thumb'] = FALSE;
$config['maintain_ratio'] = TRUE;
$config['quality'] = '80%';
$config['width'] = 200;
$config['height'] = 200;
$config['new_image'] = './upload/'.$data["file_name"];
$this->load->library('image_lib', $config);
$this->image_lib->resize();
$this->load->model('admin/Category_admin');
$image_data = array(
'img'=>$data["file_name"]
);
$image_data['parent_id'] = $this->input->post('sub_category');
$image_data['name']= $this->input->post('name');
$image_data['detail'] = $this->input->post('textarea');
$image_data['publish'] = 'Yes';
$image_data['date_added'] = date("Y-m-d H:i:s");
$image_data['date_edit'] = date("Y-m-d H:i:s");
$this->Category_admin->insert_image($image_data);
echo "YES";
}
}
}
/*------------------------------------------------------------------------------------------------------------------------------------*/
}
ประวัติการแก้ไข 2018-03-06 21:48:22 2018-03-06 21:56:13
Date :
2018-03-06 21:47:01
By :
teedesign
ประยุกต์เอาจาก อันสุดท้าย
file คือ object input file
Date :
2018-03-06 22:15:46
By :
Chaidhanan
ลอง print_r($_FILES); ดูก่อนครับ ว่ามาไหม ?
Date :
2018-03-07 00:03:37
By :
abcprintf
ข้างล่างเป็น ไฟล์ php ชื่อ validate_js.php เก็บใน views/js สำหรับ CI
เป็นโปรแกรม สำหรับ เช็ค validate และ upload ภาพไปใน ajax ก็ลองศึกษาดู
สิ่งที่ขาด ไปคือ css สำหรับ classname "hk_input hk_invalid" เวลาเกิด invalid จะให้สีอะไร ก็ทำเอาเอง นะครับ
tag hk_input ต้องประกอบด้วย attribute required pattern title placeholder data-min data-max ถึงจะครบองค์ประกอบการตรวจสอบ
Code (PHP)
<script type="text/javascript">
function b64Decode(str) {
return decodeURIComponent(Array.prototype.map.call(atob(str), function(c) {
return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);
}).join(''));
}
function readURL(input) {
if (input.files && input.files[0]) {
var reader = new FileReader();
reader.onload = function (e) {
$('#preview').attr('src', e.target.result);
}
reader.readAsDataURL(input.files[0]);
}
}
$(document).ready(function(e) {
$('li.first>a:eq(0)').data('ci-pagination-page',0);
<?php if(isset($inc_js)) include $inc_js;?>
$('#fileup').change(function(e) {
readURL(this); $('#upload').show()
});
$('#upload').click(function(e){
//alert(src.substr(0,50)); // data:image/png;base64,
var src=$('#preview').attr('src');
$.ajax({
url: "<?=(isset($upload_prog)? $upload_prog : '/Administrator/upload/')?>",
type:'POST',
data:{
img: src.replace(/data:image\/(png|jpeg|jpg|bmp|gif);base64,/, ''),
ext: src.replace(/^data:image\/(png|jpeg|jpg|bmp|gif);base64,.+/, '$1'),
filename: filename
}
}).done(function(msg){
eval('var rs = '+msg);
if(rs.msg=='complete') $('#img_url').val(rs.data.fn);
$('#upload').hide();
});
});
}).delegate('.hk_input','focusout', function(e){
if( $(e.target).is(':invalid') ){
show_invalid(e.target)
} else {
$(e.target).removeClass('hk_invalid');
}
}).delegate('.hk_input','keyup', function(e){
var et=$(e.target);
et.attr('title', (et.attr('placeholder')!=null?et.attr('placeholder') : 'Please fill in this box'));
});
function show_invalid(ob){
var et=$(ob), mm='', vl=et.val(); et.addClass('hk_invalid');
var nm = et.data('name')!=null? et.data('name') :
(et.attr('placeholder')!=null?et.attr('placeholder') : et.attr('name')),
ermsg = et.data('errmsg'), mn=parseInt('0'+et.data('min')), mx=parseInt('0'+et.data('max'));
if( ermsg && ermsg.length>0 ) mm=ermsg;
else if(mn>0 && vl.length==0) mm="This field cannot be left blank";
else if(mn>vl.length) mm='This field is less than '+mn+' characters';
else if(mx>0 && mx<vl.length) mm='This field is longer than '+mx+' characters';
else mm="This field is Wrong Format";
$(et).attr('title', mm);
}
function hk_validate(){
$('.hk_input').each(function(idx, ele){
if( $(ele).is(':invalid') ){
$(ele).addClass('hk_invalid');
} else {
$(ele).removeClass('hk_invalid');
}
})
return $('.hk_invalid').length==0;
}
String.prototype.shuffle = function () {
var a = this.split(""),
n = a.length;
for(var i = n - 1; i > 0; i--) {
var j = Math.floor(Math.random() * (i + 1));
var tmp = a[i];
a[i] = a[j];
a[j] = tmp;
}
return a.join("");
};
</script>
ตัวอย่าง tag html
Code (JavaScript)
<div class="col-xs-6">
<div class="form-group">
<label>Avatar</label>
<img src="/asset/avatar/<?=$avatar?>" alt="" id="preview" width="120" />
<input type="file" id=fileup style="display: none;" >
<button type="button" id=UploadBT class="btn-info" onClick="$('#fileup').click()" >เลือกไฟล์</button><br>
</div>
<div class="form-group">
<label>ฃื่อ-นามสกุล <b style="color: red">***</b></label>
<input type="text" id=iName class="form-control input-sm hk_input" value="{name}" required placeholder="ฃื่อ-นามสกุล" ><br>
<label>บัตรประชาชน <b style="color: red">***</b></label>
<input type="text" id=iC_id class="form-control input-sm hk_input" value="{c_id}" required pattern="[0-9]{13}" placeholder="หมายเลขบัตรประชาชน" ><br>
<label>โทรศัพท์ <b style="color: red">***</b></label>
<input type="text" id=iPhone class="form-control input-sm hk_input" value="{phone}" required pattern="[0-9\s\-,]{10,50}" placeholder="หมายเลขโทรศัพท์" ><br>
<label>อีเมล</label>
<input type="email" id=iEmail class="form-control input-sm hk_email" value="{email}" placeholder="ที่อยู่อีเมล" >
</div>
</div>
Date :
2018-03-07 07:54:59
By :
Chaidhanan
หา plugin มาศึกษาเพื่อเป็นแนวทางดูครับ เช่น jquery form หรือ ajaxForm ครับ
Date :
2018-03-08 04:55:02
By :
Manussawin
เข้าใจว่าจะทำ ajax upload?
Code (PHP)
<?php
if ($_POST) {
if (isset($_FILES['image'])) {
move_uploaded_file($_FILES['image']['tmp_name'], __DIR__ . '/'. $_FILES['image']['name']);
}
$output = [];
$output['input_post'] = $_POST;
$output['input_file'] = $_FILES;
echo json_encode($output);
exit;
}
?>
<!doctype html>
<html class="no-js" lang="">
<head>
<meta charset="utf-8">
<meta http-equiv="x-ua-compatible" content="ie=edge">
<title></title>
</head>
<body>
<h1>Test ajax upload</h1>
<form id="testform" method="post" action="test.php" enctype="multipart/form-data">
Name: <input type="text" name="name" value=""><br>
File: <input type="file" name="image"><br>
<button type="submit">Submit</button>
</form>
<div class="form-result-placeholder"></div>
<script src="https://code.jquery.com/jquery-3.2.1.min.js" integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4=" crossorigin="anonymous"></script>
<script>
$('#testform').on('submit', function(e) {
e.preventDefault();
var formUrl = $(this).attr('action');
var formObj = $(this)[0];
var formData = new FormData(formObj);
$.ajax({
url: formUrl,
data: formData,
method: 'POST',
contentType: false,
processData: false,
})
.done(function(response) {
console.log(response);
});
});
</script>
</body>
</html>
ดูเพิ่มเติม https://stackoverflow.com/a/21045034/128761
Date :
2018-03-08 10:00:10
By :
mr.v
ลองที่ผมโพสต์ยังครับ? เอาไปทดสอบทั้งดุ้นเลย มันอัพรูปได้ข้อมูลไปครบทั้งฟอร์มเลยนะครับ
Date :
2018-03-08 13:49:22
By :
mr.v
ข้างล่างคือ function ที่แปลง input file เป็น base64
Code (JavaScript)
function readURL(input) {
var b64=;
if (input.files && input.files[0]) {
var reader = new FileReader();
reader.onload = function (e) {
b64=e.target.result;
}
reader.readAsDataURL(input.files[0]);
return b64;
}
return false;
}
// ข้างล่างส่วนที่เรียกใช้งาน
var src = readURL($('#fileup')); // ตรงนี้จะได้ image ในรูปแบบ base64 มีส่วนหัวแสดงประเภทรูปภาพ
$.ajax({
url: '.....',
type:'POST',
data:{
img: src.replace(/data:image\/(png|jpeg|jpg|bmp|gif);base64,/, ''), // เอาส่วนหัวออกเหลือแต่ข้อมูลรูปภาพ
ext: src.replace(/^data:image\/(png|jpeg|jpg|bmp|gif);base64,.+/, '$1'), // แสดงประเภทรูปภาพ
}
}).done(function(msg){
//
});
และนี่
<input type="file" class="form-control-file" name="image_file" id="image_file"> อันนี้คือ tag ที่คุณ้อ้างอิง
ก็นำไปประยุกต์เอาหน่อยครับ
ของ mr.v ก็ง่ายดีครับ ถ้าอ่านและนำไปทดลองใช้ ก็ได้ครบ
ส่วนของผมคุณต้องไปแปลงกลับอีกทอดหนึีง เพื่อเซฟลงไฟล์ หรือ เก็บลง database ก็ได้
แต่ข้อดีคือ ไม่ต้องกังวลเรือ่ง upload_file_size หรือ path ที่เก็บ เพราะส่งเป็น var post
แต่ทั้งนี้ทั้งนั้น ช่วยอ่านและทดลองทำดูก่อน มันมีอยู่หลายวิธีมากมาย ขอให้ทำความเข้าใจก่อนเท่านั้นเอง
Date :
2018-03-08 16:20:38
By :
Chaidhanan
Code (JavaScript)
var form_data = new FormData(form);
$.ajax({
url : "URL",
type: "POST",
data : form_data,
contentType: false,
cache: false,
processData:false,
mimeType: "multipart/form-data"
}).done(function(res){
/*Statement*/
});
Date :
2018-03-14 13:19:53
By :
xman
Load balance : Server 02