예제 #1
0
function receiveFileFragments($F)
{
    extract($F);
    $filekey_valid = check_filekey_validity($filekey, $db);
    if ($filekey_valid) {
        #Get the information about the file from the table
        $file_id = get_entry("file_transfer", "file_id", "filekey", $filekey, $db);
        $filesize = get_entry("file_transfer", "filesize", "filekey", $filekey, $db);
        $originalname = get_entry("file_transfer", "filename", "filekey", $filekey, $db);
        #list($name, $extension) = explode('.', $originalname);
        ereg('([A-Za-z0-9]+)\\.*([A-Za-z0-9]*)$', $originalname, $tokens);
        $name = $tokens[1];
        $extension = $tokens[2];
        #$name = ereg_replace('.([A-Za-z0-9]*)$', '', $originalname);
        if ($fragNr == '') {
            $fragNr = $_REQUEST['fragNr'];
        }
        list($thisfrag, $totalfrag) = explode('/', $fragNr);
        #Define the folder where these files will be stored
        $folder = $GLOBALS['s3db_info']['server']['db']['uploads_folder'] . $GLOBALS['s3db_info']['server']['db']['uploads_file'] . '/tmps3db/';
        $filename = $folder . $file_id . '_' . $thisfrag . '.tmp';
        $final = $folder . $file_id . '.' . $extension;
        if ($fileStr == '') {
            $fileStr = $_REQUEST['fileStr'];
        }
        #decode the fragment right after receiving them if they were encoded one at a time
        if ($_REQUEST['encode'] == '2') {
            $fileStr = base64_decode($fileStr);
        }
        $indname = $folder . 'ind' . $file_id . '.txt';
        $fid = fopen($filename, 'a+');
        chmod($filename, 0777);
        if ($fragNr == '' || $fileStr == '') {
            echo "<report>Syntax: <BR>";
            echo "&lt;filekey&gt;...&lt;/filekey&gt;<BR>";
            echo "&lt;fragNr&gt;[this frag]/[total nr of frags]&lt;/fragNr&gt;<BR>";
            echo "&lt;fileStr&gt;(hexadecimal encoded fragment string)&lt;/fileStr&gt;<BR>";
            echo "</report>";
        } else {
            if ($filesize != '' && filesize($filename) == $filesize) {
                echo "<report>This file was already uploaded</report>";
            } elseif ($thisfrag > $totalfrag) {
                echo "<report>Too many fragments</report>";
            } else {
                $F = compact('thisfrag', 'fileStr', 'totalfrag', 'fid', 'filename', 'indname', 'final');
                #echo '<pre>';print_r($F);
                echo put_the_frag_on_file($F);
                #echo $thisfrag.' out of'.$totalfrag;
                #When the last fragment is in, decode the entire file
                if ($thisfrag == $totalfrag) {
                    #find all the fragment files in the folder,  write them in the final file
                    for ($i = 1; $i <= $totalfrag; $i++) {
                        $fragment_file_name = $folder . $file_id . '_' . $i . '.tmp';
                        if (is_file($fragment_file_name)) {
                            if (file_put_contents($folder . $file_id . '.tmp', file_get_contents($fragment_file_name), FILE_APPEND)) {
                                unlink($fragment_file_name);
                            }
                        } else {
                            return "Fragment " . $i . " is missing, please upload it again.";
                            exit;
                        }
                    }
                    #decode the file in the end, if the user requested it
                    if ($_REQUEST['encode'] != '2') {
                        $fullStr = file_get_contents($folder . $file_id . '.tmp');
                        $decodedStr = base64_decode($fullStr);
                        if (!file_put_contents($folder . $file_id . '.tmp', $decodedStr)) {
                            echo "Failed accepting the file. Please try again or encode file one fragment at a time before sending.";
                            exit;
                        }
                    }
                    copy($folder . $file_id . '.tmp', $final);
                    chmod($final, 0777);
                    if (is_file($folder . $file_id . '.tmp')) {
                        unlink($folder . $file_id . '.tmp');
                    }
                    return "<report>Upload Complete</report>";
                } else {
                    fclose($fid);
                }
            }
        }
    }
}
예제 #2
0
#include_once (S3DB_SERVER_ROOT.'/s3dbcore/callback.php');
if (!$filekey) {
    $filekey = $_REQUEST['filekey'];
}
if ($filekey == '') {
    echo $message . 'A Key to enter S3DB is missing.';
} elseif ($filekey != '') {
    $db = CreateObject('s3dbapi.db');
    $db->Halt_On_Error = 'no';
    $db->Host = $GLOBALS['s3db_info']['server']['db']['db_host'];
    $db->Type = $GLOBALS['s3db_info']['server']['db']['db_type'];
    $db->Database = $GLOBALS['s3db_info']['server']['db']['db_name'];
    $db->User = $GLOBALS['s3db_info']['server']['db']['db_user'];
    $db->Password = $GLOBALS['s3db_info']['server']['db']['db_pass'];
    $db->connect();
    $filekey_valid = check_filekey_validity($filekey, $db);
    #Delete all expired file_ids
    delete_expired_file_ids(date('Y-m-d G:i:s'), $db);
    if (!$filekey_valid) {
        echo "Filekey is not valid";
        exit;
    } else {
        include_once S3DB_SERVER_ROOT . '/s3dbcore/uid_resolve.php';
        #include (S3DB_SERVER_ROOT.'/s3dbcore/list_elements.php');
        include S3DB_SERVER_ROOT . '/s3dbcore/element_info.php';
        include S3DB_SERVER_ROOT . '/s3dbcore/SQL.php';
        include S3DB_SERVER_ROOT . '/s3dbcore/validation_engine.php';
        include S3DB_SERVER_ROOT . '/s3dbcore/insert_entries.php';
        #include (S3DB_SERVER_ROOT.'/s3dbcore/project_folder.php');
        include S3DB_SERVER_ROOT . '/s3dbcore/display.php';
        #include (S3DB_SERVER_ROOT.'/s3dbcore/search_resource.php');