Dan*_*nny 12 php file-upload slim cordova
我正在使用Phone Gaps(Cordova 2.1)文件传输API将图像从用户照片库发布到我的服务器.文件传输API似乎工作正常.我只是在我的服务器上检索这些信息感到困惑.
理想情况下,我需要做的是检索图像然后将其上传到我的服务器.但是,我似乎无法从文件传输中检索任何信息?
我的JavaScript代码(发布图像数据)是:
function onDeviceReady() {
// Retrieve image file location from specified source
navigator.camera.getPicture(uploadPhoto,
function(message) { alert('get picture failed'); },
{ quality: 50,
destinationType: navigator.camera.DestinationType.FILE_URI,
sourceType: navigator.camera.PictureSourceType.PHOTOLIBRARY }
);
}
function uploadPhoto(imageURI) {
var options = new FileUploadOptions();
options.fileKey="file";
options.fileName=imageURI.substr(imageURI.lastIndexOf('/')+1);
options.mimeType="image/jpeg";
var params = {};
params.value1 = "test";
params.value2 = "param";
options.params = params;
var ft = new FileTransfer();
ft.upload(imageURI, encodeURI("http://some.server.com/upload.php"), win, fail, options);
}
function win(r) {
console.log("Code = " + r.responseCode);
console.log("Response = " + r.response);
console.log("Sent = " + r.bytesSent);
}
function fail(error) {
alert("An error has occurred: Code = " + error.code);
console.log("upload error source " + error.source);
console.log("upload error target " + error.target);
}
Run Code Online (Sandbox Code Playgroud)
我的服务器端代码是:
$paramValue = $_POST['fileKey']; //Undefined variable
$paramValue2 = $_POST['options']; //Undefined variable
$paramValue3 = $paramValue2['fileKey'] //Undefined variable
Run Code Online (Sandbox Code Playgroud)
我也尝试过:
//POST variable
$paramValue = $_POST['params'];
echo "Param Value1: " . $paramValue['value1']; //Should return "test"
Run Code Online (Sandbox Code Playgroud)
我也尝试过:
//POST variable
$paramValue = $_POST['options'];
echo "Param Value1: " . $paramValue['options']['params']['value1']; //Should return "test"
Run Code Online (Sandbox Code Playgroud)
我得到的是未定义的变量错误?
任何帮助将不胜感激,谢谢!
iOS*_*Dev 20
在http://some.server.com上你可以拥有你的/var/www/目录,在这个目录中你需要upload.php,这个目录中的代码应该把你的图像移动到文件夹
/var/www/TEST/
<?php
print_r($_FILES);
$new_image_name = "YEAH.jpg";
move_uploaded_file($_FILES["file"]["tmp_name"], "/var/www/TEST/".$new_image_name);
?>
Run Code Online (Sandbox Code Playgroud)
这是你需要的唯一额外的东西.
先决条件:
您的http://some.server.com上有XAMPP LAMP WAMP或MAMP
为清楚起见,这是JavaScript和HTML,只是为了向您展示我的upload.php文件如何适合:在您的头脑中
<script type="text/javascript" charset="utf-8">
// Wait for PhoneGap to load
document.addEventListener("deviceready", onDeviceReady, false);
// PhoneGap is ready
function onDeviceReady() {
console.log("device ready");
// Do cool things here...
}
function getImage() {
// Retrieve image file location from specified source
navigator.camera.getPicture(uploadPhoto, function(message) {
alert('get picture failed');
},{
quality: 50,
destinationType: navigator.camera.DestinationType.FILE_URI,
sourceType: navigator.camera.PictureSourceType.PHOTOLIBRARY
}
);
}
function uploadPhoto(imageURI) {
var options = new FileUploadOptions();
options.fileKey="file";
options.fileName=imageURI.substr(imageURI.lastIndexOf('/')+1);
options.mimeType="image/jpeg";
var params = new Object();
params.value1 = "test";
params.value2 = "param";
options.params = params;
options.chunkedMode = false;
var ft = new FileTransfer();
ft.upload(imageURI, "http://some.server.com/TEST/upload.php", win, fail, options);
}
function win(r) {
console.log("Code = " + r.responseCode.toString()+"\n");
console.log("Response = " + r.response.toString()+"\n");
console.log("Sent = " + r.bytesSent.toString()+"\n");
alert("Code Slayer!!!");
}
function fail(error) {
alert("An error has occurred: Code = " + error.code);
}
</script>
</head>
Run Code Online (Sandbox Code Playgroud)
这就是我身体里的一切
<button onclick="getImage();">Upload a Photo</button>
Run Code Online (Sandbox Code Playgroud)
Wil*_*ill 12
还有一件事经常被忽视:客户端js文件的这一部分:
options.fileKey="file";
Run Code Online (Sandbox Code Playgroud)
必须在服务器端匹配此部分:
$_FILES["file"]
Run Code Online (Sandbox Code Playgroud)
否则,您将收到一个不会指向此事实的错误.对某些人来说这听起来可能很明显,但它可以为其他人节省一两个小时的毛发.
Yog*_*ani 10
要访问参数值,请直接将其作为POST访问.例如
服务器端 : echo "Param Value1: " . $_POST['value1']; //will return "test" as output.