$_files 在 Phonegap/Cordova 中的图像上传中为空 [关闭]
Posted
技术标签:
【中文标题】$_files 在 Phonegap/Cordova 中的图像上传中为空 [关闭]【英文标题】:$_files is empty in image upload in Phonegap/Cordova [closed] 【发布时间】:2016-11-09 19:49:01 【问题描述】:现在快 6 天了,我正在尝试修复 cordova-php 中的图像上传问题,但无法修复。我尝试了 Google 和 Stack Overflow 的多种解决方案。但它们都不适合我。
我使用下面的代码作为前端。
<div>
<h3>Server URL for upload.php:</h3>
<input id="serverUrl" type="text" value="http://sample.com/mobile_app/upload_img.php" />
</div>
<script type="text/javascript" charset="utf-8">
var deviceReady = false;
/**
* Take picture with camera
*/
function takePicture()
navigator.camera.getPicture(
function(uri)
var img = document.getElementById('camera_image');
img.style.visibility = "visible";
img.style.display = "block";
img.src = uri;
document.getElementById('camera_status').innerhtml = "Success";
,
function(e)
console.log("Error getting picture: " + e);
document.getElementById('camera_status').innerHTML = "Error getting picture.";
,
quality: 50, destinationType: navigator.camera.DestinationType.FILE_URI);
;
/**
* Select picture from library
*/
function selectPicture()
navigator.camera.getPicture(
function(uri)
var img = document.getElementById('camera_image');
img.style.visibility = "visible";
img.style.display = "block";
img.src = uri;
document.getElementById('camera_status').innerHTML = "Success";
,
function(e)
console.log("Error getting picture: " + e);
document.getElementById('camera_status').innerHTML = "Error getting picture.";
,
quality: 50, destinationType: navigator.camera.DestinationType.FILE_URI, sourceType: navigator.camera.PictureSourceType.PHOTOLIBRARY);
;
/**
* Upload current picture
*/
function uploadPicture()
// Get URI of picture to upload
var img = document.getElementById('camera_image');
var imageURI = img.src;
if (!imageURI || (img.style.display == "none"))
document.getElementById('camera_status').innerHTML = "Take picture or select picture from library first.";
return;
// Verify server has been entered
server = document.getElementById('serverUrl').value;
if (server)
// Specify transfer options
var options = new FileUploadOptions();
options.fileKey="fileUpload";
options.httpMethod="POST";
options.fileName=imageURI.substr(imageURI.lastIndexOf('/')+1);
options.mimeType="image/jpeg";
options.chunkedMode = false;
// var op;
//op = new FileUploadOptions();
options.headers =
Connection: "close"
;
// Transfer picture to server
var ft = new FileTransfer();
ft.upload(imageURI, server, function(r)
document.getElementById('camera_status').innerHTML = "Upload successful: "+r.response+" bytes uploaded."; alert(r.response);
, function(error)
alert(r.response);
document.getElementById('camera_status').innerHTML = "Upload failed: Code = "+error.code;
, options);
/**
* View pictures uploaded to the server
*/
function viewUploadedPictures()
// Get server URL
server = document.getElementById('serverUrl').value;
if (server)
// Get HTML that lists all pictures on server using XHR
var xmlhttp = new XMLHttpRequest();
// Callback function when XMLHttpRequest is ready
xmlhttp.onreadystatechange=function()
if(xmlhttp.readyState === 4)
// HTML is returned, which has pictures to display
if (xmlhttp.status === 200)
document.getElementById('server_images').innerHTML = xmlhttp.responseText;
// If error
else
document.getElementById('server_images').innerHTML = "Error retrieving pictures from server.";
;
xmlhttp.open("GET", server , true);
xmlhttp.send();
/**
* Function called when page has finished loading.
*/
function init()
document.addEventListener("deviceready", function() deviceReady = true;, false);
window.setTimeout(function()
if (!deviceReady)
alert("Error: PhoneGap did not initialize. Demo will not run correctly.");
,2000);
</script>
这里是后端 (PHP) 代码。
<?php
header("Access-Control-Allow-Origin: *");
//header("Access-Control-Allow-Methods: GET, POST, PUT, OPTIONS");
header("content-type: image/png");
// Directory where uploaded images are saved
$dirname = "user_img";//"mobile_app/user_img";
var_dump($_POST);
$new_image_name = urldecode($_FILES["fileUpload"]["name"]).".png";
// If uploading file
//echo $_FILES;
echo $new_image_name;
print_r($_FILES["fileUpload"]);
if ($_FILES)
print_r($_FILES);
//mkdir ($dirname, 0777, true);
move_uploaded_file($_FILES["fileUpload"]["tmp_name"],$dirname."/".$_FILES["fileUpload"]["name"]);
// If retrieving an image
else if (isset($_GET['image']))
$file = $dirname."/".$_GET['image'];
// Specify as jpeg
header('Content-type: image/jpeg');
// Resize image for mobile
list($width, $height) = getimagesize($file);
$newWidth = 120.0;
$size = $newWidth / $width;
$newHeight = $height * $size;
$resizedImage = imagecreatetruecolor($newWidth, $newHeight);
$image = imagecreatefromjpeg($file);
imagecopyresampled($resizedImage, $image, 0, 0, 0, 0, $newWidth, $newHeight, $width, $height);
imagejpeg($resizedImage, null, 80);
// If displaying images
else
$baseURI = "http://".$_SERVER['SERVER_NAME'].':'.$_SERVER['SERVER_PORT'].$_SERVER['REQUEST_URI'];
$images = scandir($dirname);
$ignore = Array(".", "..");
if ($images)
foreach($images as $curimg)
if (!in_array($curimg, $ignore))
echo "Image: ".$curimg."<br>";
echo "<img src='".$baseURI."?image=".$curimg."&rnd=".uniqid()."'><br>";
else
echo "No images on server";
?>
我发现$_FILES
是空的,我只得到 Array()。我不知道代码有什么问题,因为我在多个问题和示例中看到了相同的代码。
我使用了两个 Web 服务器,但结果相同。
user_img 文件夹有 777 权限。
【问题讨论】:
request 内容类型是什么? (var_dump($_SERVER['HTTP_CONTENT_TYPE']);
)
我得到 NULL。我添加了 header("content-type: image/jpeg");在标题中,但它仍然为空。
【参考方案1】:
最后我解决了这个问题,解决起来很简单。
我给的网址是http://sample.com/upload_img.php
。我只需要在网址中添加 www 。所以,工作 URL 是http://www/sample.com/upload_img.php
。
它解决了这个问题。
【讨论】:
这是duplicate of your answer here。以上是关于$_files 在 Phonegap/Cordova 中的图像上传中为空 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
我可以在调用者处将函数参数默认为 __FILE__ 的值吗?