国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

文件上傳小雨

smith

public function dealInput($buffer)
如果傳輸文件不通過pack
怎么效驗文件是否上傳完成?

6364 2 0
2個回答

mrfinger

傳輸文件不通過pack是什么意思,是通過其他渠道上傳的意思嗎?
如果通過nginx上傳,那應(yīng)該會有返回,通過返回來確定是否上傳完畢

  • 暫無評論
walkor 打賞

1、可以在頭部明文標(biāo)記長度
例如傳輸這樣的數(shù)據(jù) 1024\n$file_binary_data ,其中\(zhòng)n是個分隔符(你也可以用其它字符),用來分隔數(shù)據(jù)長度部分(1024)和文件數(shù)據(jù)部分($file_binary_data)

然后dealInput 判斷數(shù)據(jù)是否收完整就可以這樣

public function dealInput ($buffer)
{
    // 第一個元素是長度, 第二個元素是文件數(shù)據(jù)(由于網(wǎng)絡(luò)分包,這部分?jǐn)?shù)據(jù)可能還沒傳遞完整,所以需要判斷)
    $buffer_data = explode("\n", $buffer, 2);
    $total_len = $buffer_data;
    $recv_len = strlen($buffer);
    if($total_len <= $recv_len)
    {
        return 0
    }
    return $total_len  - $recv_len;
}

2、將文件base64編碼(體積估計增大1/3),這樣文件就變成明文,變成明文后就方便多了,可以利用json傳輸更多內(nèi)容,例如文件類型、文件名等,然后在json數(shù)據(jù)末尾加一個標(biāo)記,例如\n,標(biāo)記整個文件數(shù)據(jù)包的結(jié)束。
例如傳輸這樣的數(shù)據(jù) {"file_name":"my_logo.png", "type":"img", "base64_data":"xxxxxx"}."\n"
然后dealInput 判斷數(shù)據(jù)是否收完整就可以這樣

public function dealInput ($buffer)
{
    // 判斷最有一個字符是不是\n
    if($buffer_data == "\n")
    {
        // 由于不知道數(shù)據(jù)包整體的長度,所以隨便返回個數(shù)字(短鏈接可以return 任意大于0的數(shù)字;長鏈接應(yīng)該返回1,以避免多讀數(shù)據(jù))
        return 65535;
    }

    return 0;
}

3、當(dāng)然還有其它方法

  • ev 2014-09-05

    采用普通方式,直接使用Man\Core\SocketWorker來判斷包,處理包,可以這樣做。如果采用gateway方式斷點續(xù)傳上傳文件的話,請求總是不做處理,正在查看問題

年代過于久遠(yuǎn),無法發(fā)表回答
??