【问题标题】:JavaScript add file to form data via $_POSTJavaScript 通过 $_POST 将文件添加到表单数据
【发布时间】:2015-06-12 07:42:17
【问题描述】:

在以下用例中,我只尝试完成第 3 步,到目前为止还没有工作,并且我正在 Joomla 3.4 环境中工作,因为我正在这里处理模块。

  1. 我有一个 html 表单要求一些输入和文件上传。
  2. 我用 JavaScript 处理这个文件到 pgp 来加密它(用这个:https://keybase.io/kbpgp
  3. 现在我想将表单中的原始文件替换为 加密的,或者至少将加密的添加到表单数据中。 到目前为止这不起作用,我该怎么做?
  4. 在 JavaScript 部分完成所有操作后,form.submit(); 被调用
  5. 发送一封电子邮件,格式为纯文本加密为正文,文件应添加为加密附件。

一些细节:

发送未加密的文件效果很好,所以我想我可以添加加密的,但显然它不起作用。该表单提交原始内容,而没有关于添加的文件。我已经搜索了一些解决方案,这段代码 sn-p 是我研究的结果:

var data = new FormData();
data.append('upload_file' , result_buffer);
var xhr = new XMLHttpRequest();
xhr.open( 'POST', '', true );
xhr.setRequestHeader('Content-Type', 'multipart/form-data'); 
xhr.send(data);

var form = document.getElementById('formencryptmessage');
form.submit();

upload_file是原始未加密文件的表单输入;无论我做什么,$_POST 请求都会保留原始文件; result_buffer 是一个包含文件内容的二进制缓冲区;最后,formencryptmessage 是表单 ID 和名称。

编辑

带有代码的 git repo 在这里:https://github.com/JamborJan/joomlaencryptedcontact

我们正在谈论这个:https://github.com/JamborJan/joomlaencryptedcontact/blob/master/tmpl/default.php

我的主要意图是仅使用浏览器会话/RAM/隐藏输入字段来进行文件加密和发送。到目前为止我还没有找到合适的解决方案。

【问题讨论】:

  • 可能是个奇怪的问题,但是为什么不把文件发送到处理$_POST的页面后加密呢?

标签: javascript php forms joomla3.0


【解决方案1】:

也许您可以尝试,一旦文件被 pgp 加密,以 base64 编码数据,然后通过 JavaScript 编辑 DOM 将结果字符串放入输入 type=hidden。

处理提交的表单的脚本可以轻松地将文件附加到邮件中,因为邮件附件是 base64 编码的。它只需要读取隐藏输入字段的值。

如果你想要一些示例 Javascript 代码,请告诉我,我有一些 sn-ps 处理这个。

-> 我想知道和 Mave 一样的东西,但我想如果你想要这样的话是有原因的?一种解决方法可能是在带有表单的页面和告诉您已发送邮件的页面之间创建一个新页面(您可以对文件执行您想要的操作,一个服务器端,并显示它可以下载到刚刚上传未加密的用户)。

另外,要在 JavaScript 中处理 base64 编码的数据,您可以使用: - btoa() 方法编码为 base64, - atob() 方法来反转它。

【讨论】:

  • 不幸的是,到目前为止,我无法说服 Joomla 从隐藏字段中获取 base64 编码的字符串作为附件,因为它只获取路径引用的文件。我还尝试自己构建整个电子邮件,包括 MIME 内容,但 Joomla 发送的并不好,因为我只收到带有 MIME 内容的纯文本电子邮件。我的第一个意图是仅使用浏览器/RAM 进行文件处理,而无需将文件保存到磁盘。顺便说一句:在问题中添加了一些信息和指向 github 存储库的链接。
猜你喜欢
  • 2012-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-05
相关资源
最近更新 更多