如何在codeigniter中使用ajax上传图片?

如何在codeigniter中使用ajax上传图片?

问题描述:

我试图上传图像与jQuery和Ajax功能,以及如何获取图像文件的所有细节,比如在PHP中,我们使用$_FILE()如何在codeigniter中使用ajax上传图片?

这里是我的代码

JS

$("#uploadimg").click(function() { 
    $("#file").click(); 
}); 

$("#file").change(function(e) { 
    var file=$('#file').val(); 
    alert(file); 
    die(); 
    e.preventDefault(); 
    $.ajax({ 
     url:'http://localhost/JSG/blog/uploadimg', 
     secureuri:false, 
     type: "POST", 
     fileElementId:'image', 
     dataType: 'text', 
     data:{ file: file }, 
     cache: true, 
     success: function (data){ 
      alert(data); 
      console.log(data); 
     }, 
    }); 
}); 

控制器

public function uploadimg() 
{ 
    $var = $_POST['file']; 
    print_r($var); 
    if($this->input->post('file')) { 
     $config['upload_path'] = 'upload'; 
     $config['file_name'] = $var; 
     $config['overwrite'] = 'TRUE'; 
     $config["allowed_types"] = 'jpg|jpeg|png|gif'; 
     $config["max_size"] = '1024'; 
     $config["max_width"] = '400'; 
     $config["max_height"] = '400'; 
     $this->load->library('upload', $config); 

     if(!$this->upload->do_upload()) { 
      $this->data['error'] = $this->upload->display_errors(); 
      print_r($this->data['error']); 
     } else { 
      print_r("success"); 
     } 
    } 
} 

查看

<form role="form"> 
    <div class="form-group"> 
     <label for="recipient-name" class="control-label">Blog Title:</label> 
     <input type="text" class="form-control" id="recipient-name"> 
    </div> 
    <div class="form-group"> 
     <label for="message-text" class="control-label">Message:</label> 
     <textarea class="form-control" id="message-text"></textarea> 
    </div> 
    <div class="form-group"> 
     <label for="message-text" class="control-label">Upload image:</label> 
     <img src="<?php echo base_url();?>assest/img/blank.png" alt="Blank image" id="uploadimg" class="img-thumbnail"> 
     <input style="display:none" id="file" value=" " type="file" class="file" data-show-preview="false"> 
    </div> 
</form> 

响应

C:\fakepath\Koala.jpg You did not select a file to upload.

请帮

您可以使用FORMDATA API在HTML5上传文件。

您的形式必须是:

<form enctype="multipart/form-data" accept-charset="utf-8" name="formname" id="formname" method="post" action=""> 

然后jQuery的:

function uploadImage() { 

    if (typeof FormData !== 'undefined') { 

     // send the formData 
     var formData = new FormData($("#formID")[0]); 

     $.ajax({ 
      url : baseUrl + 'uploadImage', // Controller URL 
      type : 'POST', 
      data : formData, 
      async : false, 
      cache : false, 
      contentType : false, 
      processData : false, 
      success : function(data) { 
       successFunction(data); 
      } 
     }); 

    } else { 
     message("Your Browser Don't support FormData API! Use IE 10 or Above!"); 
    } 
} 

然后在控制器中你会得到$_FILES阵列的文件。

+0

当我在我的控制器中使用$ _FILES他扔[Object FileData] 有一些问题..请帮助 – Secure 2014-12-04 12:08:40

+1

我没有得到实际值如何使用完整的文件路径。 – Secure 2014-12-04 12:59:35

+0

您必须检查 - $ _FILES ['name']其中'name'是输入类型=文件的名称。您还必须为所有输入提供名称属性。使用var_dump()来查看信息。 – John 2014-12-04 13:44:14

在视图在您展示形式:

附加属性:enctype=multipart/form-data

或者,

如果要创建与表单辅助形式:

<?php echo form_open_multipart('blog/uploadimg');?> 
+0

不,我没有使用表单标签。 这里是我的看法 - >>>>>

Blank image
Secure 2014-12-03 11:18:25
+0

嘿请给我一些解决方案.. – Secure 2014-12-03 12:35:11

,如果你在JavaScript中使用这个插件(写得很好),你可以得到无缝的功能。

http://malsup.com/jquery/form/

在PHP

<?php 
$target_dir = "uploads/"; 
$target_file = $target_dir . basename($_FILES["file"]["name"]); 
$uploadOk = 1; 
$imageFileType = pathinfo($target_file,PATHINFO_EXTENSION); 
// Check if image file is a actual image or fake image 
if(isset($_POST["submit"])) { 
    $check = getimagesize($_FILES["file"]["tmp_name"]); 
    if($check !== false) { 
     echo "File is an image - " . $check["mime"] . "."; 
     $uploadOk = 1; 
    } else { 
     echo "File is not an image."; 
     $uploadOk = 0; 
    } 
} 
// Check if file already exists 
if (file_exists($target_file)) { 
    echo "Sorry, file already exists."; 
    $uploadOk = 0; 
} 
// Check file size 
if ($_FILES["file"]["size"] > 500000) { 
    echo "Sorry, your file is too large."; 
    $uploadOk = 0; 
} 
// Allow certain file formats 
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg" 
&& $imageFileType != "gif") { 
    echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed."; 
    $uploadOk = 0; 
} 
// Check if $uploadOk is set to 0 by an error 
if ($uploadOk == 0) { 
    echo "Sorry, your file was not uploaded."; 
// if everything is ok, try to upload file 
} else { 
    if (move_uploaded_file($_FILES["file"]["tmp_name"], $target_file)) { 
     echo "The file ". basename($_FILES["file"]["name"]). " has been uploaded."; 
    } else { 
     echo "Sorry, there was an error uploading your file."; 
    } 
} 
?> 
+0

有没有其他的选择,在jquery上传图片? – Secure 2014-12-03 13:11:25

+0

为什么你在寻找另一个,如果这符合你的需求? – 2014-12-03 13:12:34

+0

我看到你的例子,但在这个例子中页面刷新,但我不想在图片上传时刷新页面。这就是为什么我使用jQuery – Secure 2014-12-03 13:23:57

您可以使用Ajaxfileupload.js上传文件:

$('input[type="file"]').ajaxfileupload({ 
      'action': 'save_photo.php', 
      'params': { 
      'extra': 'info' 
      }, 
      'onComplete': function(response) { 

      console.log('custom handler for file:'); 
      alert(JSON.stringify(response)); 

      }, 
      'onStart': function() {    

      }, 
      'onCancel': function() { 
      console.log('no file selected'); 
      } 
    }); 

save_photo.php:

<?php 

print_r($_FILES); // print details about the file which has been uploaded 

?> 
+0

此API无法正常工作。当我使用此API时会显示一些错误。 – Secure 2014-12-04 12:05:25

+0

这是完美的工作,我用过相同的..你有什么错误? – 2014-12-04 12:25:09

+0

当我使用jquery.ajaxfileupload.js文件。我在控制台中收到错误消息“Uncaught SyntaxError:Unexpected token Secure 2014-12-04 12:58:32