dtdfl62844 2013-10-21 20:59
浏览 94
已采纳

上传使用jQuery文件上传无效的文件

Problem:

To set session variable and redirect user to different PHP-page once upload of .txt file has been completed using jQuery File Upload.

HTML code (upload.php):

<!-- The fileinput-button span is used to style the file input field as button -->
<span class="btn btn-success fileinput-button">
    <i class="glyphicon glyphicon-plus"></i>
    <span>Add files...</span>
    <!-- The file input field used as target for the file upload widget -->
    <input id="fileupload" type="file" name="files[]" multiple>
</span>
<br>
<br>
<!-- The global progress bar -->
<div id="progress" class="progress">
    <div class="progress-bar progress-bar-success"></div>
</div>
<!-- The container for the uploaded files -->
<div id="files" class="files"></div>

jQuery code (upload.php):

<script>    
    $(function () {
        'use strict';
        // Server-side upload handler:
        var url = 'process.php';

        $('#fileupload').fileupload({
            url: url,
            autoUpload: true,
            acceptFileTypes: /(\.|\/)(txt)$/i,
            maxFileSize: 5000000, // 5 MB
            done: function (e, data) {
                $(this).delay(2000, function(){
                    window.location = "explorer.php";
                });
            },
            progressall: function (e, data) {
                var progress = parseInt(data.loaded / data.total * 100, 10);
                $('#progress .progress-bar').css(
                    'width',
                    progress + '%'
                );
            }
        }).prop('disabled', !$.support.fileInput)
            .parent().addClass($.support.fileInput ? undefined : 'disabled');
    });
</script>

PHP upload script (process.php):

<?php
    session_start();

    $folder      = 'upload';

    if (!empty($_FILES))
    {
        // Set temporary name
        $tmp    = $_FILES['files']['tmp_name'];

        // Set target path and file name
        $target = $folder . '/' . $_FILES['files']['name'];

        // Upload file to target folder
        $status = move_uploaded_file($tmp, $target);

        if ($status)
        {
            // Set session with txtfile name
            $_SESSION['txtfile'] = $_FILES['files']['name'];
        }
    }
?>

Desired output:

  • Text file should be uploaded to folder /upload - which currently has chmod 777
  • Session of text file name should be assigned to the variable $_SESSION['txtfile']
  • Redirect user once upload is done to the file "explorer.php"

EDIT: SOLVED. Final code above!

  • 写回答

1条回答 默认 最新

  • dqfwcj0030 2013-10-21 21:04
    关注

    For starters...

    Notice your input name is files[] and has attribute multiple. This means that you are sending an array of files to the server so to reference them in php, you'll need something like this:

    $_FILES['files']['name'][0]

    for the first file.

    Also, I have found that move_uploaded_file() likes full paths for the destination, try tacking on $_SERVER['DOCUMENT_ROOT'].

    To send information back to jQuery you would want to use echo json_encode() like so...

    echo json_encode(array(
        'status' => $status,
        'message' => 'your message here'
    ));
    

    In your done function the data can be accessed like this:

    done: function(e, data){
         console.log(data.status);
         console.log(data.message);
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan