为啥文件只能部分上传?
Posted
技术标签:
【中文标题】为啥文件只能部分上传?【英文标题】:Why might a file only be partially uploaded?为什么文件只能部分上传? 【发布时间】:2011-02-25 14:51:24 【问题描述】:为什么文件只能部分上传?
我正在改进我的 php 文件上传脚本中的错误处理,并试图弄清楚如何正确处理 UPLOAD_ERR_PARTIAL。
我应该提示用户再次尝试上传文件,还是应该通知他们有更严重的问题阻止他们上传可能是合法的文件?
【问题讨论】:
【参考方案1】:为什么一个文件可能只是部分 上传了吗?
这通常是由于用户取消上传造成的。
我是否应该提示用户尝试 再次上传文件,或者我应该 告诉他们还有更多 正在阻止的严重问题 他们从上传可能 合法文件?
您应该提示他们再试一次,如果问题仍然存在,请联系网站所有者,包括尽可能详细的信息。
【讨论】:
我们应该如何在客户端使用JS和服务器端使用PHP处理这种情况?我的意思是,如果用户开始上传文件,然后在文件仍在上传时点击页面上的取消按钮,我可以调用.abort()
PHP 将如何接收用户取消上传的信息?
【参考方案2】:
UPLOAD_ERR_PARTIAL 在文件数据后未找到 mime 边界时给出。造成这种情况的一个可能原因是用户取消了上传(按 ESC 等)。
我认为通知用户文件只是部分上传就足够了,重试将解决问题。
【讨论】:
+1 用于澄清“文件数据后未找到 mime 边界时” @Seb 也完全 +1 了那个。遇到了类似的问题,那个小小的旁注让我找到了源头。 :) 就我而言,我忘记了最后一个(在本例中为以下)边界上的前导--
。经验教训:-)
@halfdan - 我不明白为什么 mime 边界会丢失。 PHP 不处理边界吗?或者,当程序保存文件(在我的情况下为 PDF 或 pptx)时,文件的开头和结尾不是由使用的程序设置的吗?【参考方案3】:
嗯,文件上传可能会被中断:
目的地空间不足
连接中断
损坏文件
名字错误
错误的扩展名
等等……
您可以做的最好的事情是在将文件实际发送到服务器之前,通过确实验证来验证和保护上传过程......
我第一次做文件上传脚本,我用了1行代码,现在,同样的脚本看起来像一个网页;)
已编辑(控制扩展名和文件大小的示例):
如果((
($file_up["type"] == "image/gif") || ($file_up["type"] == "image/jpeg") || ($file_up["type"] == "image/jpg") || ($file_up["type"] == "image/pjpeg") || ($file_up["type"] == "image/bmp") || ($file_up["type"] == "image/tiff") || ($file_up["type"] == "image/png")) && ($file_up["size"] < 1050000)) code if all ok...
【讨论】:
嗯...是的,想象一下您的输入应该只处理图片并且用户尝试上传文档,如果它应该只是图片,您应该拒绝任何其他文件扩展名(在编辑评论下查看我的答案... 问题是文件名/扩展名如何导致 UPLOAD_ERR_PARTIAL? 嗯,它没有...文件扩展名只是警告您可能遇到的可能错误... :) 特别是对于 UPLOAD_ERR_PARTIAL,Halfdan 所说的似乎是唯一的原因。 .. 所以,只要通知用户进程被中断,应该再试一次!【参考方案4】:这是一个旧帖子,但我遇到了一个 UPLOAD_ERR_PARTIAL 的随机问题,并发布我的解决方案。
问题是,在上传 2/3 后,我得到了 UPLOAD_ERR_PARTIAL 的错误,而客户端没有任何中断。
我的问题与 Keep-Alive 服务器有关。
我通过在上传的 PHP 脚本末尾插入来解决它
header ("Connection: close");
强制关闭连接。这解决了我的问题。
希望有人能帮忙。
感谢LINK
【讨论】:
为我工作!我花了几个小时认为我的脚本失败了 / flakey 似乎是服务器。 @Treemonkey 很高兴有用 ;-) 在此复制:***.com/questions/12425394/… 我看到很多人给出了这个答案,但如果有人能解释为什么强制禁用 keepalive 会起作用,那就太好了。【参考方案5】:这可能对某些人有所帮助,但我遇到了同样的问题。 我的解决方案是卸载 libapache2-mod-php5filter 并将其替换为经典的 libapache2-mod-php5
【讨论】:
【参考方案6】:我有同样的问题,并且与包 libapache2-mod-php5filter 相关,我删除了 p 和问题结束。 我希望有人可以提供帮助。
【讨论】:
@yellowantphil 对我来说似乎是一个边缘回答【参考方案7】:我今天在本地机器上处理 ajax 文件上传时遇到了这个问题,直到我意识到(一小时后)我在另一个程序(MS Excel)中打开了同一个文件(CSV)。关闭相关程序后一切恢复正常。
希望有帮助!
【讨论】:
以上是关于为啥文件只能部分上传?的主要内容,如果未能解决你的问题,请参考以下文章
为啥有些网站不能直接用FTP上传而只能用"SSH Secure Shell"