Nginx上传进度模块

时间:2012-07-11 11:08:56

标签: php upload nginx

我有一个非常广泛的问题....我不明白上传进度模块是如何工作的,它对我来说也不起作用,所以....

1)我已经安装了所有上传模块的nginx(nginx,nginx-extras)和php-fpm

2)这是我项目的nginx配置的一部分:

    location ~ \.php$ {
  include /etc/nginx/fastcgi_params;
  fastcgi_pass 127.0.0.1:9000;
  fastcgi_param SCRIPT_FILENAME /home/cha0s/learnphp$fastcgi_script_name;
  fastcgi_param PATH_INFO $fastcgi_script_name;

  track_uploads proxied 1m;
}

location ~ ^/files/(.*)$ {
        alias /home/cha0s/$1;
        internal;
}

location ^~ /progress {
        # report uploads tracked in the 'proxied' zone
        report_uploads proxied;
}

3)我按照本页底部的教程进行操作:http://wiki.nginx.org/HttpUploadProgressModule

所以我有一个表单并上传进度条:

<form id="upload" enctype="multipart/form-data" action="index.html" method="post">
  <input name="file" type="file"/>
  <input type="submit" value="Upload"/>
</form>
<div id="uploading">
  <div id="progress" class="bar">
    <div id="progressbar"> </div>
    <div id="percents"></div>
  </div>
</div>

触发jquery脚本的JS代码:

  <script type="text/javascript">
    $(document).ready(function(){
      $('form').uploadProgress({
        /* scripts locations for safari */
        jqueryPath: "/static/js/jquery.js",
        uploadProgressPath: "/static/js/jquery.uploadProgress.js",
        /* function called each time bar is updated */
        uploading: function(upload) {$('#percents').html(upload.percents+'%');},
        /* selector or element that will be updated */
        progressBar: "#progressbar",
        /* progress reports url */
        progressUrl: "/progress",
        /* how often will bar be updated */
        interval: 2000
      }
    });
  </script>

那个剧本: https://github.com/drogus/jquery-upload-progress/blob/master/jquery.uploadProgress.js

问题和问题:

1)第一个问题是我总是被归还({“state”:“starting”}); ...

2)第二个问题是:我开始尝试使这个东西工作的原因,是因为我想写一个PHP脚本,它将文件切成块并发送到服务器,所以我可以上传大文件,并有一个进度条来监控它。但我甚至找不到最小的例子或教程如何用php和upload_progress_module或w / e完成它。

不,我不想要基于闪存的上传者。

所以我想,你已经明白我很困惑。因此,如果你能解释我如何完成这项工作,并帮助解决现有配置的问题,那将是很好的

2 个答案:

答案 0 :(得分:1)

action="index.html"看起来不像是location ~ \.php$的请求。

答案 1 :(得分:0)

不确定您是否仍然遇到此问题,但请参阅下面的解决方案......

  1. 未指定upload_pass值
  2. 未指定upload_store
  3. 指定后,需要使用正确的权限创建upload_store哈希目录
  4. 将动作“/ upload”添加到表单并将表单发送到您上传域中的此位置(如果与表单域不同)会更有意义
  5. 我认为根据json返回的'starting'值,我会先看看第2点和第3点的目录问题
  6. 需要使用GET参数“X-Progress-ID = [自定义上传ID号]”将表单传递给您上传位置,以便它可以跟踪状态