javascript - Warum kann ich in PHP + Ajax keine Bilder ohne Aktualisierung hochladen?
大家讲道理
大家讲道理 2017-05-24 11:30:56
0
2
525

Schreiben Sie eine relativ einfache Datei-Upload-Funktion. Sie müssen auf Hochladen klicken, um sie auf den Server hochzuladen.
Aber nach dem Testen schlägt der Upload immer noch fehl. Ich weiß nicht, was los ist. Unten ist mein Code:

html

<body>
    <p class="toolbar1">
        <a href="javascript:;" id="upload" class="a-upload mr10"><input id="changeFile" type="file" name="myFiles" id="">点击这里上传文件</a>
        <p class="showFileName mr10"></p>
        <button id="uploadBtn" type="button" class="btn btn-primary">上传</button>
    </p>
</body>

php:

<?php 
    //做个路由 action为url中的参数
    $action = $_GET['action'];
    switch($action) {
        case 'upload_file':
            upload();
            break;
    }
    
    function upload(){
        // 获取上传的图片
        $pic = $_FILES['myFiles']['tmp_name'];
        $upload_ret = false;
    
        if($pic){
            // 上传的路径,建议写物理路径
           $uploadDir = "../upload_files";
            // 创建文件夹  
            if(!file_exists($uploadDir)){        
                mkdir($uploadDir, 0777);    
            }    
            // 用时间戳来保存图片,防止重复
            $targetFile = $uploadDir . '/' . time() . $_FILES['myFiles']['name'];    
            // 将临时文件 移动到我们指定的路径,返回上传结果
            $upload_ret = move_uploaded_file($pic, $targetFile) ? true : false;
        }
    
        return $upload_ret;
    }
?>

js:

$(function() {
    //上传图片
    $('#uploadBtn').on('click',function(){
        /*alert('444');*/
        uploadFiles();
    })

    function uploadFiles(){
        //上传文件接口
        var uploadUrl = "./php/data.php?action=upload_file";
        //选择的文件
        var files = document.getElementById('changeFile').files[0];
        var fileArr = [files];
        //经过调试是不进ajax的
        $.ajax({
            type:"post",
            url:uploadUrl,
            data:fileArr,
            dataType: 'json',
            contentType: 'application/json;charset=utf-8',
            success: function(data) {
                console.log(data);
            },
            error: function(data){
                        
            }
        });
    }
}

Nach dem Debuggen wird Ajax nicht in js eingegeben. Ich weiß nicht, was das Problem ist. Bitte helfen Sie, danke!
Wie erhalte ich in PHP den Wert von $pic = $_FILES['myFiles']['tmp_name'];$pic? Beim Debuggen habe ich festgestellt, dass dieser Wert nicht abgerufen werden kann. In js konvertiere ich die erhaltenen Dateiinformationen in ein Array und übergebe sie per Ajax-Post. Wie übergebe ich dieses Array an PHP?

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

Antworte allen(2)
漂亮男人

你传的是混合型数据,把contenttype和processData改成false试试

$.ajax({
            type:"post",
            url:uploadUrl,
            data:{ "yourfiles": files} //这里改成obj对象,
            dataType: 'json',
            contentType: false,
            processData:false,
            success: function(data) {
                console.log(data);
            },
            error: function(data){
                        
            }
        });
迷茫

processData 要设为 false

你使用Ajax 提交 需要 需要 使用 formData 配合

var file = document.getElementById('changeFile').files[0]
var uploadUrl = "./php/data.php?action=upload_file"
var fd = new FormData()

fd.append('myFiles', file)

$.ajax({
    type:"post",
    url:uploadUrl,
    data: fd,
    processData: false,
    contentType: false,
    success: function(data) {
        console.log(data);
    },
    error: function(data){
        
    }
})
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage