Java 在php中上传正在运行的文件

Java 在php中上传正在运行的文件,java,php,upload,Java,Php,Upload,我知道这听起来很奇怪。我的服务器上有一个php文件,负责处理上传。我桌面上的一个java程序将文件发送到这个php文件。我想随时取消文件上传到服务器的过程。所以我想创建一种流或类似的东西来停止正在进行的上传过程 我尝试使用PIDs来停止php文件的运行。但是,在客户端完成上传之前,php文件不会开始运行 我想在上传开始之前运行“savePid()”函数。因此,我可以获取PID并随时停止运行该文件 <?php include('func.php'); savePid(); //run thi

我知道这听起来很奇怪。我的服务器上有一个php文件,负责处理上传。我桌面上的一个java程序将文件发送到这个php文件。我想随时取消文件上传到服务器的过程。所以我想创建一种流或类似的东西来停止正在进行的上传过程

我尝试使用PIDs来停止php文件的运行。但是,在客户端完成上传之前,php文件不会开始运行

我想在上传开始之前运行“savePid()”函数。因此,我可以获取PID并随时停止运行该文件

<?php
include('func.php');
savePid(); //run this before upload started

$in = stream_get_contents(fopen("php://input", "rb"));
$out = fopen('pipeupload.txt', 'w');

while ( ! feof($in) ) {
    fwrite($out, fread($in, 8192));
}
?>


我知道这行不通。我只是在寻找一个解决方案来停止正在进行的上传过程。

在服务器端可能是这样。

示例:

您有20个图像,每个图像的大小都超过2MB。你的java 来自桌面的文件发送图像url数组,该数组已准备就绪 如您所说,通过php文件上传。在php文件中,您必须执行一些 更改,在每次图像上载之前,您必须签入数据库 (创建表格并添加新字段图像\u取消或将此字段添加到 上一个表,设置默认值为false)列名图像\u取消为 对/错。如果为真,则停止执行并退出。现在创建一个新的 脚本cancel\u image.php->在内部编写代码并设置image\u cancel 字段为true


这不是一件容易的事

我可以想出两种选择,但两者都不容易。先轻松一点

第一种方法:
您应该有两个PHP脚本,一个用于处理上载(现在已经有了),另一个用于通知客户端中止。客户端应该像您现在所做的那样上传到上传脚本,并定期检查是否在通知脚本上发布了中止。一旦客户端找到abort,它就会中止其余的上传。因此,您的文件永远不会到达处理上载的PHP文件。此方法要求客户端处理中止。不考虑中止的客户端仍然可以上载完整文件

第二种方法:

您应该编写自己的文件处理模块或应用程序,而不是普通的web服务器。您还可以编写apache模块,该模块与文件上载挂钩(如果您的web服务器是apache)。但这种方法更复杂,如果您不托管它,它将不会在web服务器上运行。这种方法需要修补Web服务器或安装在系统级工作的应用程序,我认为任何管理员都不会允许在他们的服务器上使用这种方法。

我认为您无法停止从PHP上传。据我所知,PHP会在上传完成后获取文件。真正的接收过程由web服务器完成。@bansi我可以在服务器端选择其他解决方案。我只需要停止上传过程。如果在java程序中取消java程序的上传,PHP将只收到部分上传。检查该错误,然后让脚本终止。@CharlotteDunois我知道我必须停止服务器上的进程。终止web服务器进程不是一个好主意,因为它会导致更多的问题,而不是解决问题。此外,这甚至可能不会停止上传本身。停止客户端上的上载。我想我只有一个图像,但它是100 mb,我想在它完全发送到服务器之前取消上载。我能想到的唯一解决方案是将一个大文件拆分成小块,然后逐个发送,并检查服务器在发送完每一块后是否仍要获取该文件。@charty:是的,对于大尺寸的图像,您必须将图像分割成小块,您也可以使用javascript进行分割。我希望我的答案接近你的答案。你说我应该把图片的路径发送到服务器,php会上传图片。PHP如何上载只有路径信息的文件?根据您的回答,java程序将发送文件的路径而不是文件本身?或者我不明白:)