我有以下文件。开发人员工具的Response标头中没有显示任何内容。我期待与文件相关的变量并在我的accept.php
页面中发布。
我可以看到console.log(formData);
正在打印,但console.log(returndata);
1)send.php
档案
<?php
echo '
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
<script type="text/javascript" src="file.js"></script>
<form id="data" enctype="multipart/form-data">
<input type="hidden" name="id" value="123" readonly="readonly">
User Name: <input type="text" name="username" value=""><br />
Profile Image: <input name="profileImg[]" type="file" /><br />
Display Image: <input name="displayImg[]" type="file" /><br />
<button type = "button" onclick="submitFileTest()">Submit Button </button>
</form>';
?>
2)file.js
function submitFileTest() {
//grab all form data
var formData = new FormData($(this)[0]);
console.log("Form Data Test");
console.log(formData);
$.ajax({
url: 'accept.php',
type: 'POST',
data: formData,
async: false,
cache: false,
contentType: false,
processData: false,
success: function (returndata) {
//alert(returndata);
console.log(returndata);
}
});
}
3)accept.php
<?php
if (isset($_POST['id'])) {
$id = $_POST['id'];
var_dump($id);
echo $id;
}
if (isset($_POST['username'])) {
$username = $_POST['username'];
var_dump($username);
echo $username;
}
if (isset($_FILES['profileImg'])) {
$profileImg = $_FILES['profileImg'];
var_dump($profileImg);
echo $profileImg;
}
if (isset($_FILES['displayImg'])) {
$displayImg = $_FILES['displayImg'];
var_dump($displaying);
echo $displayImg;
}
?>
测试结果(使用Popmedic答案后):
在测试之前,对于displayImg
,我将以下行formData.append('displayImg', $('input[type=file]')[1].files[0]);
中的文件数组值从0
更改为1
,如下所示formData.append('displayImg', $('input[type=file]')[1].files[1]);
我能够在php脚本中看到id
值,username
值和profileImg
值,如下面IE11控制台窗口的屏幕截图所示。但由于某种原因,代码没有获取第二个文件displayImg
。
以下是IE11 Request body
的屏幕截图,显示文件displayImg
没有任何内容。
关于Popmedic评论的澄清(4月18日):
我已使用this solution合并了POST和FILEs结果,并以JSON格式获得了以下内容:
{"id":"123","username":"123","profileImg":{"name":"Request_body.PNG","type":"image\/png","tmp_name":"C:\\wamp\\tmp\\phpA981.tmp","error":0,"size":15842},"displayImg":{"name":"Request_body.PNG","type":"image\/png","tmp_name":"C:\\wamp\\tmp\\phpA9A1.tmp","error":0,"size":15842}}
我已经有一个Java webservice工作,它接受一个JSON对象并以CLOB的形式存储在Oracle数据库中。这就是我合并并转换为JSON的原因,如上所示。我想在上面从代码行$str
获得的JSON响应中包含变量$str = file_get_contents($_FILES["displayImg"]["tmp_name"]);
值,这样除了上面的JSON之外,我还可以将文件内容包含到webservice中, Java Web服务将确保将其插入Oracle数据库。最终我的cuRL请求看起来像这样:
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_PORT => "9090",
CURLOPT_URL => "http://localhost:9090/myJavaWebservice/rest/somepath/insertDataToDB",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => $_POST["myData"],
CURLOPT_HTTPHEADER => array(
"Cache-Control: no-cache",
"Content-Type: application/json"
),
));
$response_post_march22 = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response_post_march22;
}
我已经有上面的curl请求工作并将数据插入到数据库中但是现在而不是myData
JSON object
,我将传递新的JSON,我在合并之后创建了使用$str
变量获取的文件内容,以便可以将所有内容存储到数据库中。
答案 0 :(得分:0)
也许在标题中设置一些内容供您查看...
if (isset($_POST['id'])) {
$id = $_POST['id'];
header ("ID: $id");
var_dump($id);
echo $id;
}else {
header ("ID-Present: Nope");
}
if (isset($_POST['username'])) {
$username = $_POST['username'];
header ("User-Name: $username");
var_dump($username);
echo $username;
}else {
header ("User-Name-Present: Nope");
}
if (isset($_FILES['profileImg'])) {
$profileImg = $_FILES['profileImg'];
header ("Profile-Image-Present: Yep");
var_dump($profileImg);
echo $profileImg;
} else {
header ("Profile-Image-Present: Nope");
}
if (isset($_FILES['displayImg'])) {
$displayImg = $_FILES['displayImg'];
header ("Display-Image-Present: Yep");
var_dump($displayImg);
echo $displayImg;
} else {
header ("Display-Image-Present: Nope");
}
更新显示如何设置查询参数
如果您希望标题是其他标题,那么&#34; Nope,&#34;你需要在你的javascript AJAX请求中发送这些值,如下所示:
function submitFileTest() {
var formData = new FormData();
formData.append('id', $('[name="id"]').val());
formData.append('username', $('[name="username"]').val());
// Attach file
formData.append('profileImg', $('input[type=file]')[0].files[0]);
formData.append('displayImg', $('input[type=file]')[1].files[0]);
console.log("Form Data Test");
console.log(formData);
$.ajax({
url: 'accept.php',
type: 'POST',
data: formData,
cache: false,
contentType: false,
processData: false,
success: function (returndata) {
//alert(returndata);
console.log(returndata);
}
});
}
最新使用get_file_post_data
来自其他SOLUTION
我相信如果您更改other solutions get_file_post_data
函数(我必须从此函数中删除一些无用的代码,这让我太烦了):
function get_file_post_data() {
$files = array();
$post = $_POST;
foreach ($_FILES as $key_a => $data_a)
foreach ($data_a as $key_b => $data_b) {
// Add this --->
if ($key_b == 'tmp_name')
$files['data'][$key_a] = base64_encode(file_get_contents($data_b));
// <--- end
$files[$key_b][$key_a] = $data_b;
}
foreach ($files as $type => $data) merge_file_post_data($type, $data, $post);
return $post;
}
然后,当您使用json_encode(get_file_post_data(), JSON_PRETTY_PRINT);
之类的内容转换为JSON时,您将拥有如此的JSON:
{
"id": "123",
"username": "kevin",
"profileImg": {
"name": "suggestions@1.png",
"type": "image\/png",
"data": "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAAXNSR0IArs4c6QAAAAlwSFlzAAALEwAACxMBAJqcGAAAAVlpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDUuNC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iPgogICAgICAgICA8dGlmZjpPcmllbnRhdGlvbj4xPC90aWZmOk9yaWVudGF0aW9uPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KTMInWQAAAe1JREFUOBGNlLtKXUEUhr3FGxowCnaCjVaiQghaW6SzsNDCNHkCfQcrJa1YaGNhL1j4AClTJCkkBDmCCEE0ihfQqHj5\/j3rD\/ucfY664JuZdZ01s+ecurqiNIapm3kFSnAJF7ALS9AGkqY01R5dbJyQa\/gGszAMI\/AZfsERDIDEOUnLjQ2x7mO+h4Wcr3K5huEcOsJRXxkg3Tttsd6OAB3pTfjkbw67pu+wGnrh6O5O93YGH2oFYtcGkkk4BhfLunQhtzxIwBXoniQ6eqXY9hOH8vsjoKygk2QUjzY8Mz9EbFbIce7QBXZwtIK+qMT3mrQ0OmcM9Q70lCSukTRGJ2+w\/hpWJzso381vjF\/C4Xt0XDY7uQftH8yFNx\/sTRfx6YNYz28UaWly8hSqinaFVwneUA9aH0aPX+KcpFWM+Z328c2EX++vJdbzzD9i7Q5DLVbXxaqo5r\/wFiS3acpG2fTTk+QbyAzV2nVBHes9bEIvyH4Io3ADrxYf4xMZZ1CCvZj1RP7AR5A4NmmMhZb\/e9JCb+0d6OemO+yEE1DXVeW5I7eTMQEqqF+FRI\/+APTF\/Uspe9DVChKbiRL0pyr0hHRvsukavEFZMew1j+wOhohZh1OQTVc0DXrUjmH5svhudenLoI701fULsY9lUZ4ALVRR18zk4X0AAAAASUVORK5CYII=",
"tmp_name": "\/private\/var\/tmp\/phpBU7D0c",
"error": 0,
"size": 941
},
"displayImg": {
"name": "suggestions@2.png",
"type": "image\/png",
"data": "iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM\/rhtAAAAAXNSR0IArs4c6QAAAAlwSFlzAAALEwAACxMBAJqcGAAAAVlpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDUuNC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iPgogICAgICAgICA8dGlmZjpPcmllbnRhdGlvbj4xPC90aWZmOk9yaWVudGF0aW9uPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KTMInWQAABKNJREFUWAm9mE+IVmUUxsfUSE1z\/ItSKDRRLQzUJEkmQhqw2rgRwtoULQo3ga3CxbRS3AiCQguXs3CRqIgEIjYjEU1GFEHOxjFwSqQazb+NTvb8vnue2535\/r33fkMHnnve97znPPe8533fe+\/3zeoqJ4\/IfZYwGWF90m8KG4Q1wiqBsSvCZeEb4aQwLCBzBMYf0plpmV0g3K72dwI3SsEZ+W0WECbIRJME5xQhOWaO\/xHhXcEypMY54WfhZhiXSL8gvCasDxuqX\/iUhoQk\/6m1Orx4tnPFQyKu2Cm1NyVwb5PPt4U4JmhJLZD96zQEJmEvObndBU\/G2VuASgP31czlkFqO3x\/W4rbJHcs0uBHysWDyD2qWbIk8HqY6RfJU3nJADfO8EcZ2HI6t017a1RoZFyA+HF6QurJhaqmKlTorT7h+EMxh3ZJk+qBn1q8BCH8VugXEyWe9tKv5ODQcDjh3RKjHopuumNn3AmR7I6wymeJdyRPBeTQ4bY9ue+UKPS\/X+wIJbomw0mQRh\/Lk3lMbzlHhcQFpuMxOJHP572p7j0yQXhNGYriTZxdJIew\/5CnhyVqrZIIR07UsGr9L37CxA+0E4bsjsBrdwVeqghHTuOwe7ECTqJNtmJi5vZTuT9csLbJcWFxrdXZxMitEs0B4IPwRlE44uplqlqD32UW5\/S2Q4LospNIjJkLzFXkpDKPSv0S7YYIObKQ92680SPBn4eST2Cimnc2cg3KE0+\/lSpwO2hVkt6V7BKTKo8avPD4eSA5sFZAqfPlyzBfBJQHCzwWk2dbIRuuv9qeCPGLg4hsR8VjWK3l1Fd9WnGf9YXC4IimUrtDB4GGPb4xAj6XwNPTxDAc0SpITwovhmULuSe6MeDj2RLzHoltNOcHHFP6jwA3OJ1L5UDwh\/7GIPVGI9XjBVK3p5XwlbkKSLwdVqyq6Qu9H3J\/SfL4hreIyD11dndzQpMEDFRkSLtRaXV29oVM47HtaMXy2kfhkxLdUKeQQUDHP+KdgfCY0Y83ESTwdDpzgUpKaIKTeL1fjDv6QaJYg\/oxRLX7lIY7NeglX75EE19yFrxBkXqaabhMSZGtwuADi2KyXcK2SoPejl5wP2lbCG8j38ZK38p8y5sApxjYdNjnyrPCqwI91eKYvNduHivFVvlJAfstUnW+YO1Per\/z\/cksgoTLgcJnD+1mmmRUvK28FqgPuCvcCfJoVgX1C4LvS\/82YQ6b2UmUmPp0LRc9BYQ9SSfYX71jaaIQ2CflwUEGPqdlequxBbsqNuDGnc6lAsosEXmlFYOfNMSL0C6WSk39+uminiKvHT8WvhbUC+5HqsbQsN6eWg\/OXcD36vIcRx2e9hCsBVYXK8Y4mMaoKF1XFRmVZfr4leUiPC\/zDVVrKJugK8INnQHhOYJuQzKPRZvm9D0mehL8Q3hEcr2aaVNmDMHMyjwskMCZ4WVluwKHwA13NXEi8lJStoMldiT4ZegUeJ1SK6hkkw8HhZ8Jg2EsfEsVVElf+E0WTSCu8Hnco9fyrlFUhqFj5Y4UEWVZOtBPeFzFU9X+XYpIf6e7DAvuPE\/ul8JZgKfralqT\/BVPW\/p9Rsv1pAAAAAElFTkSuQmCC",
"tmp_name": "\/private\/var\/tmp\/php3kezNJ",
"error": 0,
"size": 1635
}
}
如果您希望将响应时间缩短一半,可以尝试在PHP中执行一些poorman's threading ...