【问题标题】:How to transfer file from php to java using php-java-bridge如何使用 php-java-bridge 将文件从 php 传输到 java
【发布时间】:2014-04-08 19:08:07
【问题描述】:

我正在尝试上传文件,我的前端应用程序是 PHP,后端引擎是 Java。它们都通过 PHP-Java_bridge 进行通信。

我的第一个动作是,当一个文件被发布到 PHP 页面时,它会检索它的内容。

$filedata= file_get_contents($tmpUploadedLocation);

然后将此信息传递给接受字节数组saveFileContents(byte[] contents)的Java EJB外观

这是我在 PHP 中如何将 $filedata 转换为字节数组的方法。

$bytearrayData = unpack("C*",$filedata);

最后调用了Java服务(使用php-java-bridge检索Java服务对象)

$javaService->saveFileContents($bytearrayData);

如果文件大小较小,这可以正常工作,但如果大小增加 2.9 MB,我会收到错误消息,因此文件内容不会保存到磁盘上。

Fatal error: Allowed memory size of 134217728 bytes exhausted //This is PHP side error due to unpack

我不知道怎么做,上面的方法不准确,请我有一些限制。

  1. 引擎(Java)负责保存和检索 内容。
  2. PHP-HTML 是前端应用程序,它现在可以是任何东西,它只是 PHP
  3. PHP 使用 PHP-Java-Bridge 与 Java 通信
  4. PHP 访问 EJB 的方法以保存和检索信息。

上述组合一切正常,但现在是关于上传和保存文档的问题。它将用于任何前端应用程序(PHP 或通过远程接口(查找)的其他 java 应用程序)的 EJB(应用程序引擎访问点)。

我的问题是如何将 PHP 中的文件内容发送到 Java,而不会破坏任何东西(内存)?

【问题讨论】:

  • PHP 中经常配置文件上传限制。这也可能是一个原因:stackoverflow.com/questions/2184513/…
  • @JoopEggen 上述限制已被覆盖,我可以上传文件但问题是将其转发到 Java 引擎。

标签: java php file-upload php-java-bridge


【解决方案1】:

我不会将文件转换为数组,而是尝试将其作为字符串传递。 PHP中将字符串编码为base64,Java中将其解码为数组。

另一个选择是通过文件系统传递文件。一些 Linux 系统将 /dev/shm 或 /run/shm 挂载到 tmpfs,这通常是在程序之间传递临时数据而不会产生硬盘开销的好方法。一个典型的 tmpfs 算法是 1) 创建一个文件夹; 2)从中删除旧文件(例如超过一分钟的文件); 3) 保存新文件; 4)将文件路径传递给Java; 5) 删除文件。第 2 步很重要,以免在第 3-5 步由于某种原因未完成时浪费内存。

【讨论】:

  • 我试过传递字符串,Java端接收到一个空字符串,但是我没有尝试先将它转换为base64(虽然它会增加内容的大小)。
  • 对不起,我认为您假设前端和后端应用程序都在同一台服务器上???如果我错过了理解,我提前道歉。
  • 是的,尝试使用 base64 打包。我假设是同一台服务器,是的。
猜你喜欢
  • 1970-01-01
  • 2021-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-26
  • 2011-11-03
  • 2012-03-21
相关资源
最近更新 更多