我正在尝试将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 插件类。
<?php
class 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);
}
}
慕桂英4014372
相关分类