簡體   English   中英

PHP-上傳到服務器后獲取文件的文件路徑

[英]PHP - Getting the filepath of the file after uploading to server

美好的一天。 我正在將圖像文件上傳到我的PHP服務器。 我已成功將文件上傳到文件夾。 我現在想做的是,在組裝JSON響應時,我想獲取文件的新文件路徑,這樣我就可以知道它在程序上的位置。

到目前為止,這是我的PHP代碼:

<?php
header('Content-Type: text/html; charset=utf-8');

    if (
        !isset($_FILES['fileToUpload']['error']) ||
        is_array($_FILES['fileToUpload']['error'])
    ) {
        die(json_encode(array(
            'success' => false,
            'status' => "Invalid Parameters. - 1",
            'files' => $_FILES 
        )));
    }

    // Check $_FILES['fileToUpload']['error'] value.
    switch ($_FILES['fileToUpload']['error']) {
        case UPLOAD_ERR_OK:
            break;
        case UPLOAD_ERR_NO_FILE:

            die(json_encode(array(
                'success' => false,
                'status' => "No file sent. - 2",
                'files' => $_FILES
            )));

        case UPLOAD_ERR_INI_SIZE:
        case UPLOAD_ERR_FORM_SIZE:
            die(json_encode(array(
                'success' => false,
                'status' => "Exceeded filesize limit. - 3",
                'files' => $_FILES
            )));

        default:
            die(json_encode(array(
                'success' => false,
                'status' => "Unknown errors. - 4",
                'files' => $_FILES
            )));

    }

    // You should also check filesize here. 
    if ($_FILES['fileToUpload']['size'] > 1000000) {
            die(json_encode(array(
                'success' => false,
                'status' => "Exceeded File Size Limit. - 5",
                'files' => $_FILES
            )));

    }

    // DO NOT TRUST $_FILES['fileToUpload']['mime'] VALUE !!
    // Check MIME Type by yourself.
    $finfo = new finfo(FILEINFO_MIME_TYPE); 
    if (false === $ext = array_search(
        $finfo->file($_FILES['fileToUpload']['tmp_name']),
        array(
            'jpg' => 'image/jpeg',
            'png' => 'image/png',
            'gif' => 'image/gif',
        ),
        true
    )) {
        die(json_encode(array(
            'success' => false,
            'status' => "Invalid file format. - 6",
            'files' => $_FILES
        )));

    }

    // You should name it uniquely.
    // DO NOT USE $_FILES['fileToUpload']['name'] WITHOUT ANY VALIDATION !!
    // On this example, obtain safe unique name from its binary data.
    if (!move_uploaded_file(
        $_FILES['fileToUpload']['tmp_name'],
        sprintf('./gallery/%s.%s',
            sha1_file($_FILES['fileToUpload']['tmp_name']),
            $ext
        )
    )) {
        die(json_encode(array(
            'success' => false,
            'status' => "Failed to move uploaded file. - 7",
            'files' => $_FILES
        )));

    }
        $filePathFull = sprintf('./gallery/%s.%s',
            sha1_file($_FILES['fileToUpload']['tmp_name']);

        $uploaddir = '/gallery/';
        $uploadfile = $uploaddir . basename($_FILES['fileToUpload']['tmp_name']);


        die(json_encode(array(
            'success' => true,
            'status' => "File is uploaded successfully. - 8",
            'files' => $_FILES,
            'filePath' => $uploadfile
        )));
?>

我正在嘗試獲取新的文件路徑,即/gallery/ +文件名,但是,在ExtJS部分中處理它時,我得到的是無效的JSON對象。

誰能幫我解決我的問題? 我也嘗試了sprintf('./gallery/%s.%s', sha1_file($_FILES['fileToUpload']['tmp_name']);但這似乎不起作用。

很感謝任何形式的幫助。

編輯:

到目前為止,這有效:

$uploaddir = '/gallery/';
$uploadFile = $uploaddir . basename($_FILES['fileToUpload']['tmp_name']);

die(json_encode(array(
    'success' => true,
    'status' => "File is uploaded successfully. - 8",
    'filePath' => $uploadFile
)));

但是,我沒有文件擴展名,但是卻得到類似: /gallery/phptnLZJm但是經過檢查,實際上已上傳圖像,但文件名已關閉。

我成功了 我認為這是sha1_file的問題。 現在的代碼是:

    if (!move_uploaded_file(
        $_FILES['fileToUpload']['tmp_name'],
        sprintf('./gallery/%s.%s',
            basename($_FILES['fileToUpload']['tmp_name']),
            $ext
        )
    )) {
        die(json_encode(array(
            'success' => false,
            'status' => "Failed to move uploaded file. - 7",
            'files' => $_FILES
        )));

    }
//          $uploadFile = sprintf('./gallery/%s.%s',
//              sha1_file($_FILES['fileToUpload']['tmp_name']);

        $uploaddir = '/gallery/';
//          $uploadFile = $uploaddir . basename($_FILES['fileToUpload']['tmp_name']);
        $name = $_FILES["fileToUpload"]["tmp_name"];

        $fullPath = sprintf('/gallery/%s.%s',
            basename($_FILES['fileToUpload']['tmp_name']),
            $ext
        );

        die(json_encode(array(
            'success' => true,
            'status' => "File is uploaded successfully. - 8",
            'filePath' => "$fullPath"
        )));

以前,在組裝$fullPath時,我將稱呼sha1_file而不是basename ,我也不知道為什么。 是因為它已經被移動並且現在有了另一個名稱了嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM