2017-02-16 59 views
0

我试图上传一个映像文件,并将其存储在我的服务器上,并将其存储在存储在Mysql数据库上的文件位置的路径中。我使用一个Ajax请求发送数据,但我在访问文件的任何部分严重的问题:访问fileData的问题

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)它打印

任何想法?我看过负载,但无法解决这个问题。

我在和我大学的一位教授交谈,他说“multipart/form-data”可能是一个痛苦的工作,并说我可能会更好地使用PUT?

回答

1

在这里有两件事要提到这个问题。

首先,您将需要在客户端做一些额外的工作,以javascript来传递多部分数据 - 我怀疑这是您的老师可能一直在谈论的内容。为此,我会引用你的this SO answer。其次,在服务器端,与所有其他表单数据不同,文件不在$ _GET,$ _POST或$ _REQUEST数组中,而是在它们自己的$_FILES array中,而不是在它们自己的$_FILES array中。我鼓励你对此进行阅读,但基本上,PHP将在临时位置上传,并且你应该将文件复制到它的最终位置 - 然后将路径保存到数据库中。

希望这会有所帮助!

+0

这对我有很大的帮助,为我节省了大量的时间,非常感谢 –