2013-12-10 45 views
6

Tôi đã trải qua những ngày tìm kiếm một tích hợp khá đơn giản của angularjs tập tin phương pháp tải lên bao gồm một php server side script cơ bản ..Angularjs - Tập tin tải lên với php

Tôi cần một hình thức một upload lĩnh vực và upload file đơn giản.

Tất cả các ví dụ tôi thấy là phụ thuộc nhiều vào jQuery hoặc nếu chúng có vẻ như một cái gì đó tôi có thể sử dụng "ví dụ" của chúng hoàn toàn không rõ ràng và lộn xộn.

Hai ví dụ (nếu tôi có thể tìm ra cách để kết hợp với PHP) sẽ giải quyết câu đố của tôi ..

Ví dụ 5 trên trang này http://ng-upload.eu01.aws.af.cm/

Và ví dụ trên trang này là một trong tôi thực sự giống như rất nhiều .. http://angular-file-upload.appspot.com/

Ai đó có thể mang nhiều ánh sáng hơn vào điều này cho tôi .. Tôi thực sự muốn thấy một đầu vào được gửi và một tệp tải lên với mã đơn giản và góc php có thể nếu điều đó tồn tại ở đâu đó .

Tôi sẽ rất vui khi thực hiện điều này http://twilson63.github.io/ngUpload/ hoặc http://angular-file-upload.appspot.com/

Nếu đây là PHP tôi

$fname = $_POST["fname"]; 
if(isset($_FILES['image'])){ 
    $errors= array(); 
    $file_name = $_FILES['image']['name']; 
    $file_size =$_FILES['image']['size']; 
    $file_tmp =$_FILES['image']['tmp_name']; 
    $file_type=$_FILES['image']['type']; 
    $file_ext = strtolower(pathinfo($file_name, PATHINFO_EXTENSION)); 
    $extensions = array("jpeg","jpg","png");   
    if(in_array($file_ext,$extensions)=== false){ 
    $errors[]="image extension not allowed, please choose a JPEG or PNG file."; 
    } 
    if($file_size > 2097152){ 
    $errors[]='File size cannot exceed 2 MB'; 
    }    
    if(empty($errors)==true){ 
     move_uploaded_file($file_tmp,"images/".$file_name); 
     echo $fname . " uploaded file: " . "images/" . $file_name; 
    }else{ 
     print_r($errors); 
    } 
} 
?> 

và html này cơ bản của tôi

<form action="" method="POST" enctype="multipart/form-data"> 
    <input type="text" name="fname" /> 
    <input type="file" name="image" /> 
    <input type="submit"/> 
</form> 

Làm thế nào tôi có thể tiếp cận này (sạch) ? Điều khiển và điều chỉnh html của tôi trông như thế nào?

Trả lời

20

Nếu bạn sử dụng ng-file-upload Bạn có thể thực hiện hầu hết các xác thực trước đó ở phía máy khách như kiểm tra kích thước tệp hoặc loại với chỉ thị ngf-max-size hoặc ngf-pattern.

Upload.upload() sẽ gửi yêu cầu nhiều phần/biểu mẫu POST tới máy chủ để $_FILES['file'] phải chứa tệp được tải lên.

HTML

<div ng-controller="MyCtrl"> 
    <input type="text" name="username" ng-model="username"/> 
    <input type="file" ngf-select="onFileSelect($file)" ngf-pattern="'image/*'" ngf-max-size="2M"> 
</div> 

JS:

//inject angular file upload directives and service. 
angular.module('myApp', ['ngFileUpload']); 

var MyCtrl = [ '$scope', 'Upload', function($scope, Upload) { 
    $scope.onFileSelect = function(file) { 
    if (!file) return; 
    Upload.upload({ 
     url: '/upload.php', 
     data: {file: file, username: $scope.username} 
     }).then(function(resp) { 
     // file is uploaded successfully 
     console.log(resp.data); 
     });  
    }; 
}]; 

upload.php

$fname = $_POST["fname"]; 
if(isset($_FILES['image'])){ 
    //The error validation could be done on the javascript client side. 
    $errors= array();   
    $file_name = $_FILES['image']['name']; 
    $file_size =$_FILES['image']['size']; 
    $file_tmp =$_FILES['image']['tmp_name']; 
    $file_type=$_FILES['image']['type']; 
    $file_ext = strtolower(pathinfo($file_name, PATHINFO_EXTENSION)); 
    $extensions = array("jpeg","jpg","png");   
    if(in_array($file_ext,$extensions)=== false){ 
    $errors[]="image extension not allowed, please choose a JPEG or PNG file."; 
    } 
    if($file_size > 2097152){ 
    $errors[]='File size cannot exceed 2 MB'; 
    }    
    if(empty($errors)==true){ 
     move_uploaded_file($file_tmp,"images/".$file_name); 
     echo $fname . " uploaded file: " . "images/" . $file_name; 
    }else{ 
     print_r($errors); 
    } 
} 
?> 
+0

Xin cảm ơn bạn đã dành thời gian. Bạn có thể cho tôi biết $ upload đến từ đâu không? Và tôi luôn luôn nhận được các tập tin $ không xác định khi cố gắng-tập tin tải lên góc .. Bạn có thể biết tại sao? – GRowing

+4

$ upload là dịch vụ góc sẽ được cung cấp khi bạn bao gồm angular-file-upload.js Làm theo hướng dẫn trên trang GitHub và mở một vấn đề ở đó nếu bạn vẫn gặp sự cố. Nhiều người đang sử dụng nó theo cách này. – danial

+0

dear @danial làm cách nào để bạn đặt tên 'hình ảnh' cho $ _FILE ở phía khách hàng? –

2

Tôi cũng đã chiến đấu với $ file được undefined - Tôi sẽ đưa một đoán hoang dã mà bạn đang viết mã html từ php và chưa thoát được $ trong $ tệp. Đó là vấn đề của tôi anyway - nên được \ $ tập tin.

Dan

+0

Đây là một dự đoán hoang dã tốt :) Tôi sẽ phải kiểm tra lại điều này. – GRowing

+0

Bạn có làm việc này không? – Zypps987

Các vấn đề liên quan