2012-12-13 62 views
0

我有一段时间试图在jQuery File Upload插件中提交额外的表单数据。这里描述https://github.com/blueimp/jQuery-File-Upload/wiki/How-to-submit-additional-Form-Data,但它没有详细说明如何检索和使用UploadHandler.php中的数据。下面是我有:从jQuery文件上传中检索formData

index.php文件(的形式):

<form id="fileupload" action="<?php echo $this->config->item('base_url'); ?>/cool_upload/server/php/" method="POST" enctype="multipart/form-data"> 
    <input type="hidden" id="userID" value="<?php echo $this->session->userdata('id'); ?>"> 
    <!-- The fileupload-buttonbar contains buttons to add/delete files and start/cancel the upload --> 
    <div class="row fileupload-buttonbar"> 
     <div class="span7"> 
      <!-- The fileinput-button span is used to style the file input field as button --> 
      <span class="btn btn-success fileinput-button"> 
       <i class="icon-plus icon-white"></i> 
       <span>Add files...</span> 
       <!-- REMOVED MULTIPLE FROM HERE TO ONLY ALLOW ONE FILE AT A TIME!!!! --> 
       <input type="file" name="files[]"> 
      </span> 
      <button type="submit" class="btn btn-primary start"> 
       <i class="icon-upload icon-white"></i> 
       <span>Start upload</span> 
      </button> 
      <button type="reset" class="btn btn-warning cancel"> 
       <i class="icon-ban-circle icon-white"></i> 
       <span>Cancel upload</span> 
      </button> 
      <button type="button" class="btn btn-danger delete"> 
       <i class="icon-trash icon-white"></i> 
       <span>Delete</span> 
      </button> 
      <input type="checkbox" class="toggle"> 
     </div> 

    </div> 

    <!-- The global progress information --> 
     <div class="span5 fileupload-progress fade"> 
      <!-- The global progress bar --> 
      <div class="progress progress-success progress-striped active" role="progressbar" aria-valuemin="0" aria-valuemax="100"> 
       <div class="bar" style="width:200%;"></div> 
      </div> 
      <!-- The extended global progress information --> 
      <div class="progress-extended">&nbsp;</div> 
     </div> 


    <!-- The loading indicator is shown during file processing --> 
    <div class="fileupload-loading"></div> 
    <br> 
    <!-- The table listing the files available for upload/download --> 
    <table role="presentation" class="table table-striped"><tbody class="files" data-toggle="modal-gallery" data-target="#modal-gallery"></tbody></table> 
</form> 
<br> 


<!-- The template to display files available for upload --> 
<script id="template-upload" type="text/x-tmpl"> 

    <tr class="template-upload fade"> 
    <td colspan="2" class="preview"><span class="fade"></span></td> 
    <td class="changeFileName"><input type="text" name="changeFileName" class="changeFileName" style="width: 110px;" placeholder="New File Name?" maxlength="25" /> 

     <select class="selectCat" name="selectCategory" style="width: 130px;"> 
      <option selected="selected" value="0">Select Category:</option> 
      <?php 
      foreach ($fileCategory as $t) 
      { 
       echo '<option value="'.$t['id'].'">'.$t['name'].'</option>'; 
      } 
      ?> 
      <option value="3">Other...</option> 
     </select> 

    </td> 
    <td colspan="2" class="name" width="20"><span>{%=file.name%}</span></td> 
    <td colspan="2" class="size"><span>{%=o.formatFileSize(file.size)%}</span></td> 
    {% if (file.error) { %} 
     <td class="error" colspan="2"><span class="label label-important">Error</span> {%=file.error%}</td> 
    {% } else if (o.files.valid && !i) { %} 
     <td> 
      <div class="progress progress-success progress-striped active" role="progressbar" aria-valuemin="0" aria-valuemax="100" aria-valuenow="0"><div class="bar" style="width:0%;"></div></div> 
     </td> 
     <td class="start">{% if (!o.options.autoUpload) { %} 
      <button class="btn btn-primary"> 
       <i class="icon-upload icon-white"></i> 
       <span>Start</span> 
      </button> 
     {% } %}</td> 
    {% } else { %} 
     <td colspan="2"></td> 
    {% } %} 
    <td class="cancel">{% if (!i) { %} 
     <button class="btn btn-warning"> 
      <i class="icon-ban-circle icon-white"></i> 
      <span>Cancel</span> 
     </button> 
    {% } %}</td> 
    <td rowspan="2"></td> 
</tr> 
{% } %} 
</script> 

main.js:

$('#fileupload').bind('fileuploadsubmit', function (e, data) { 
    data.formData = $('form').serializeArray(); 
}); 

UploadHandler.php:

,尤其是圆形是我的编辑到邮政功能:

public function post($print_response = true) { 
    if (isset($_REQUEST['_method']) && $_REQUEST['_method'] === 'DELETE') { 
     return $this->delete($print_response); 
    } 
    $upload = isset($_FILES[$this->options['param_name']]) ? 
     $_FILES[$this->options['param_name']] : null; 
    // Parse the Content-Disposition header, if available: 
    $file_name = isset($_SERVER['HTTP_CONTENT_DISPOSITION']) ? 
     rawurldecode(preg_replace(
      '/(^[^"]+")|("$)/', 
      '', 
      $_SERVER['HTTP_CONTENT_DISPOSITION'] 
     )) : null; 
    // Parse the Content-Range header, which has the following form: 
    // Content-Range: bytes 0-524287/2000000 
    $content_range = isset($_SERVER['HTTP_CONTENT_RANGE']) ? 
     preg_split('/[^0-9]+/', $_SERVER['HTTP_CONTENT_RANGE']) : null; 
    $size = $content_range ? $content_range[3] : null; 
    $files = array(); 
    // IF THERE ARE MULTIPLE FILES 
    if ($upload && is_array($upload['tmp_name'])) { 
     // param_name is an array identifier like "files[]", 
     // $_FILES is a multi-dimensional array: 
     foreach ($upload['tmp_name'] as $index => $value) { 
      $files[] = $this->handle_file_upload(
       $upload['tmp_name'][$index], 
       $file_name ? $file_name : $upload['name'][$index], 
       $size ? $size : $upload['size'][$index], 
       $upload['type'][$index], 
       $upload['error'][$index], 
       $index, 
       $content_range, 
       isset($_REQUEST['userID']) ? $_REQUEST['userID'] : null, 
      null 
      ); 
     } 
    } else { 
     // param_name is a single object identifier like "file", 
     // $_FILES is a one-dimensional array: 
     $files[] = $this->handle_file_upload(
      isset($upload['tmp_name']) ? $upload['tmp_name'] : null, 
      $file_name ? $file_name : (isset($upload['name']) ? 
        $upload['name'] : null), 
      $size ? $size : (isset($upload['size']) ? 
        $upload['size'] : $_SERVER['CONTENT_LENGTH']), 
      isset($upload['type']) ? 
        $upload['type'] : $_SERVER['CONTENT_TYPE'], 
      isset($upload['error']) ? $upload['error'] : null, 
      null, 
      $content_range, 
      isset($_REQUEST['userID']) ? $_REQUEST['userID'] : null, 
      null 
     ); 
    } 
    return $this->generate_response(array('files' => $files), $print_response); 
} 

-I添加的参数handle_file_upload

protected function handle_file_upload($uploaded_file, $name, $size, $type, $error, 
     $index = null, $content_range = null, $userID) { 

当我尝试使用$用户ID我什么也得不到,因为它是空的。我如何使用表单中的用户ID?同样在index.php中,在模板显示区域,我怎样才能使用那些添加的输入呢?例如,我有一个输入changeFilerName和一个选择来选择类别。我已阅读文档,但我仍不确定事情是如何传递给UploadHandler的。

回答

0

首先,通过查看页面的源代码,确保$ userID填充在隐藏表单域中。隐藏的表单字段需要这样一个名字:

<input name="userID" id="userID" .... 

在PHP侧输入的值将是$ _POST阵列中可用

$_POST['userid'] 

你也应该遵守的请求/响应您的浏览器随附的开发人员工具控制台中的Ajax请求或Firebug之类的工具。

+0

我有一个的console.log和它显示与正确的信息,但是当我使用$ _ POST [“用户ID” ]在PHP文件中我什么也没得到。这是我的日志: [对象] 0:对象 名: “用户ID” 值: “4” __proto__:对象 长度:1个 __proto__:数组[0] – KraigBalla

+0

这听起来像Ajax请求没有被制作。你的控制台是否显示请求和响应? –

+0

正在制作ajax请求,因为我可以在控制台日志中看到它。 [Object] 0:对象名称:“userID”值:“4”proto:对象长度:1 proto:Array [0] – KraigBalla