亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Base64 編碼 .tgz 文件用于 Javascript XHR 調用中的 POST 上傳

Base64 編碼 .tgz 文件用于 Javascript XHR 調用中的 POST 上傳

慕斯709654 2022-12-18 16:00:46
我正在嘗試將POST文件.tgz用作XHR文件上傳的一部分。該文件本身是有效的,我已經通過手動上傳對其進行了測試。我遇到的問題(我認為)是當我將文件編碼base64并上傳時,它已損壞并且未被視為有效。該文件本身是 Atmail 的插件模塊,我已經像我說的那樣手動測試了它。這是我的 base64 截斷后的上傳功能。我最初使用以下代碼對目標文件進行編碼:cat myfile.tgz | base64 > base64_file并縮短/刪除新行:sed ':a;N;$!ba;s/\n/ /g' plugin.base64 > t我的問題是,這是對壓縮文件進行編碼以便在我的 POST 請求中使用的正確方法嗎?如果是這樣,我的實施有什么問題?function uploadPlugin(){    var uri = "/index.php/admin/plugins/preinstall";    var name = "newPlugin";    filename = "RCE.tgz";    // Comments and extra lines removed to reduce payload size    // Remove new lines: sed ':a;N;$!ba;s/\n/ /g' plugin.base64 > t    var content = "H4sIAAAAAAAAA+0aa2/bOLJfk1/BFYJaLvyIs0m6TZpss30Awe22vabXA65XqLREx2xkSSWppNlu ...";    var formData = new FormData();    var blob = new Blob([atob(content)],        {            type: "application/x-gtar-compressed"        }    )    formData.append(name, blob, filename);    var request = new XMLHttpRequest();    request.open("POST", uri);    request.send(formData);   }這是我正在使用的 ATMail 插件類。<?phpclass Atmail_Test_Plugin extends Atmail_Controller_Plugin{        protected $_pluginFullName   = 'rce';    protected $_pluginModule = 'mail';        private $_loginPage = false;    public function dispatchLoopStartup(Zend_Controller_Request_Abstract $request)    {        $request = $this->getRequest();        if (($request->getControllerName() == 'index' && $request->getActionName() == 'index') ||            ($request->getControllerName() == 'auth' && $request->getActionName() == 'logout')) {            $this->_loginPage = true;        }    }    public function postDispatch(Zend_Controller_Request_Abstract $request)    {        if ($this->_loginPage) {            $page = $this->getResponse()->getBody();            $page = str_replace("</body>", "<!-- plugins working -->\n</body>", $page);            $this->getResponse()->setBody($page);        }    }    
查看完整描述

1 回答

?
慕桂英4014372

TA貢獻1871條經驗 獲得超13個贊

我最終發現出了什么問題。我試圖錯誤地發布二進制數據。以下是工作解決方案。


function uploadPlugin()

{

    var uri = "/index.php/admin/plugins/preinstall";

    var name = "newPlugin";

    filename = "Upload.tgz";

    var body = "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\x03\xed\x1a\x6b\x6f\xdb" +

    "\x38\xb2\x5f\x93\x5f\xc1\x15\x82\x5a\x2e\xfc\x88\xb3\x49\xba" +

    "..." +

    "...";


    var formData = new FormData();


    var payload = new Uint8Array(body.length);


    for (var i = 0; i < payload.length; i++)

    {

        payload[i] = body.charCodeAt(i);

    }


    var blob = new Blob([payload])

    formData.append(name, blob, filename);


    var xhr = new XMLHttpRequest();

    xhr.open("POST", uri);

    xhr.send(formData);   

}


查看完整回答
反對 回復 2022-12-18
  • 1 回答
  • 0 關注
  • 137 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號