2016-10-05 2 views
0

Ich habe diese Frage gegoogled, aber keine Antwort gefunden. Ich verwende die Angular-Direktive ng-file-upload, um Bilder auf mein Backend hochzuladen. Am Back-End verwende ich PHP, um das Bild abzurufen. Es funktioniert gut, wenn ich ein Bild auswählen, das keinen Leerraum enthält. Wenn ich jedoch ein Bild auswähle, das Leerzeichen enthält, wird ein Fehler ausgegeben. Das ist, was ich tat iDateiuploads schlägt fehl, wenn der Dateiname Leerzeichen enthält

//app.js 
         Upload.upload({ 
         url: "api/index.php/postNewFeedsWithPicture", 
           file: $scope.file, 
           method: "post" 
           }).then(function (response) { 
           $scope.isShowing = false; 
           if (response.data.error) { 
            toastr.options = {positionClass: 'toast-bottom-full-width'}; 
            toastr.error(response.data.message, {timeOut: 5000}); 
           } 
           else { 
            toastr.options = {positionClass: 'toast-bottom-full-width'}; 
            toastr.success(response.data.message, {timeOut: 5000}); 
            $scope.file = null; 

           } 

          }, function (reason) { 
           $scope.isShowing = false; 
           toastr.options = {positionClass: 'toast-bottom-full-width'}; 
           toastr.error('Message not posted! Network error', {timeOut: 5000}); 
          });       

in meine HTML-Datei, die diese tat

<div role="button" ngf-select ng-model="file" name="file" ngf-pattern="'image/*'" ngf-accept="'image/*'" ngf-max-size="20MB">Upload</div> 

in meinem PHP-Datei ich eine Funktion geschrieben, die das Bild speichert

function savePictureToDb($fileName, $dirName) { 
$target_dir = "../image/" . $dirName . "/"; 
$target_file = $target_dir . basename($_FILES[$fileName]["name"]); 
$uploadOk = 1; 
$errorMsg = null; 
$report = array(); 
$imageFileType = pathinfo($target_file, PATHINFO_EXTENSION); 
// Check file size. //20mb 
if ($_FILES[$fileName]["size"] > 20000000) { 
    $uploadOk = 0; 
    $errorMsg = "File size is greater than 20 mega bytes"; 
} 
// Allow certain file formats 
if ($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg" && $imageFileType != "gif") { 
    $uploadOk = 0; 
    $errorMsg = "The file selected is not an image"; 
} 
if ($uploadOk == 0) { 
    $report[ERROR] = TRUE; 
    $report[MESSAGE] = $errorMsg; 
    return $report; 
    // if everything is ok, try to upload file 
} else { 
    if (move_uploaded_file($_FILES[$fileName]["tmp_name"], $target_file)) { 
     rename($target_file, $target_dir . generateRandStr_md5(500) . "." . $imageFileType); 
     $response['path'] = basename($_FILES[$fileName]["name"]); 
     $report[ERROR] = FALSE; 
     $report[PATH] = $response['path']; 
     return $report; 
    } else { 
     $errorMsg = "Unexpected error"; 
     $report[ERROR] = TRUE; 
     $report[MESSAGE] = $errorMsg; 
     return $report; 
    } 
} 

}

Es funktioniert gut, aber wenn das Bild Leerraum enthält, ist dies der Fehler, den ich beim Debuggen

bekomme
array (
    'file' => 
    array (
    'name' => 'Age Declaration.jpg', 
    'type' => '', 
    'tmp_name' => '', 
    'error' => 1, 
    'size' => 0, 
), 
) 
+0

Sie $ target_file = $ target_dir verwenden können. (string) Basisname ($ _ FILES [$ Dateiname] ["Name"]); –

Antwort

0

Benennen Sie den Dateinamen mit Zufallswert

$filename1=explode(".", $file); 
$extension=end($filename1); 
$file=rand().time().".".$extension; 

oder benutzen Sie pathinfo() für extention

$ext = pathinfo($filename, PATHINFO_EXTENSION); 
Verwandte Themen