【问题标题】:Why might a file only be partially uploaded?为什么文件只能部分上传?
【发布时间】:2011-02-25 14:51:24
【问题描述】:

为什么文件只能部分上传?

我正在改进我的 PHP 文件上传脚本中的错误处理,并试图弄清楚如何正确处理 UPLOAD_ERR_PARTIAL。

我应该提示用户再次尝试上传文件,还是应该通知他们有更严重的问题阻止他们上传可能是合法的文件?

【问题讨论】:

    标签: php error-handling upload file-upload


    【解决方案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 很高兴有用 ;-)
    • 我看到很多人给出了这个答案,但如果有人能解释为什么强制禁用 keepalive 会起作用,那就太好了。
    【解决方案5】:

    这可能对某些人有所帮助,但我遇到了同样的问题。 我的解决方案是卸载 libapache2-mod-php5filter 并将其替换为经典的 libapache2-mod-php5

    【讨论】:

      【解决方案6】:

      我有同样的问题,并且与包 libapache2-mod-php5filter 相关,我删除了 p 和问题结束。 我希望有人可以提供帮助。

      【讨论】:

      • @yellowantphil 对我来说似乎是一个边缘回答
      【解决方案7】:

      我今天在本地机器上处理 ajax 文件上传时遇到了这个问题,直到我意识到(一小时后)我在另一个程序(MS Excel)中打开了同一个文件(CSV)。关闭相关程序后一切恢复正常。

      希望有帮助!

      【讨论】:

        猜你喜欢
        • 2017-10-22
        • 1970-01-01
        • 2011-07-09
        • 2020-04-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多