访问fileData

时间:2017-02-16 19:38:56

标签: javascript php html mysql ajax

我尝试上传图片文件并将其存储在我的服务器上,并指向存储在Mysql数据库中的文件位置的路径。我正在使用ajax请求发送数据,但访问该文件的任何部分时遇到严重问题:

PHP

<input type="file" id="upload_file" name='upload_file' style="width: 0px;height: 0px;">

调用此javascript

function upload_photo(user_id) {

    var file = document.getElementById('upload_file')

    /* Create a FormData instance */
    var formData = new FormData(form);
    formData.append('user_id', user_id)
    formData.append('file', file)
    request = new ajaxRequest()
    request.open("POST", "edit_details.php", true)
    request.setRequestHeader("Content-type", "multipart/form-data")
    request.onreadystatechange = function () {
        if (this.readyState == 4)
            if (this.status == 200)
                if (this.responseText != null)
                    O('page').innerHTML = this.responseText
    }
    request.send(formData)

}

请求有效负载如下所示:

------WebKitFormBoundaryFA8fI4XH99ES61F6
Content-Disposition: form-data; name="file"

[object HTMLInputElement]
------WebKitFormBoundaryFA8fI4XH99ES61F6
Content-Disposition: form-data; name="user_id"

1001
------WebKitFormBoundaryFA8fI4XH99ES61F6-- 

但是当我调用var_dump($ _ REQUEST)时会打印

有什么想法吗?我已经查看了负载,但无法解决这个问题。

我正在和我大学的一位教授谈话,他说&#34; multipart / form-data&#34;可能是一种痛苦的工作,并说我可能更好地使用PUT?

1 个答案:

答案 0 :(得分:1)

此问题有两件事需要提及。

首先,您需要在客户端进行一些额外的工作,在javascript中传递多部分数据 - 我怀疑这是您的老师可能在谈论的内容。为此,我建议你this SO answer

其次,在服务器端,与所有其他表单数据不同,文件不在$ _GET,$ _POST或$ _REQUEST数组中,而是在自己的$_FILES array中。我鼓励您阅读此内容,但基本上,PHP将在临时位置上传,您应该将文件复制到它的最终位置 - 然后将 路径保存到您的数据库中

希望这有帮助!