Base64 encode.tgz文件,用于Javascript XHR调用中的后期上载
我正在尝试使用Base64 encode.tgz文件,用于Javascript XHR调用中的后期上载,javascript,Javascript,我正在尝试使用XHR作为文件上载的一部分,发布a.tgz文件 该文件本身是有效的,我已经通过手动上传进行了测试。我(我想)遇到的问题是,当我将文件编码到base64并将其上载时,该文件已损坏,无法作为有效文件获取 该文件本身是Atmail的一个插件模块,正如我所说,我已经手动测试过了 这是我的上载函数,其中base64被截断 我最初使用以下代码对目标文件进行编码: cat myfile.tgz|base64>base64_文件 以及缩短/删除新线路,包括: sed:a;N、 美元!文学士;s/\
XHR
作为文件上载的一部分,发布a.tgz
文件
该文件本身是有效的,我已经通过手动上传进行了测试。我(我想)遇到的问题是,当我将文件编码到base64
并将其上载时,该文件已损坏,无法作为有效文件获取
该文件本身是Atmail的一个插件模块,正如我所说,我已经手动测试过了
这是我的上载函数,其中base64被截断
我最初使用以下代码对目标文件进行编码:
cat myfile.tgz|base64>base64_文件
以及缩短/删除新线路,包括:
sed:a;N、 美元!文学士;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);
}
}
public function setup()
{
$db = zend_Registry::get("dbAdapter");
$db->query("drop table if exists `TestPluginSettings`");
$db->query("create table `TestPluginSettings` (`id` int auto_increment primary key, `keyName` varchar(12), `keyValue` text, index `keyName` (`keyName`))");
}
public function setViewRenderScript()
{
//return "/path/to/nothing.phtml";
}
public function setViewRenderAction()
{
}
}
我最终发现了问题所在。我试图错误地发布二进制数据。以下是有效的解决方案
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);
}
函数上传插件()
{
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有效载荷=新的Uint8Array(body.length);
对于(变量i=0;i
我最终发现了问题所在。我试图错误地发布二进制数据。以下是有效的解决方案
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);
}
函数上传插件()
{
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有效载荷=新的Uint8Array(body.length);
对于(变量i=0;i
为什么不将其作为正确的文件上传发送?XHR和fetch都支持这一点……你能说明你的意思吗?为什么不把它作为正确的文件上传发送呢?XHR和fetch都支持这一点……你能说明你的意思吗?