我试图自定义你可以找到的Mosync照片库样本这里和这里
这是一个Html/java应用程序,可以拍摄快照,然后通过php文件(在本例中文件为upload.php)将拍摄的照片上传到web服务器
一切对我来说都很好,但我想添加一个电子邮件字段,并要求用户在上传之前输入他的电子邮件地址到这个字段。我想发送这封电子邮件附带图片,但希望在上传完成后在服务器端(php)这样做。
我试图添加一个邮件功能(具有预定义的sendto地址和链接到图片)到upload.php文件,它的工作原理,但我不能得到设备上的返回状态消息告诉用户,上传是完整的。这是令人愉快的,因为用户不知道进程是否完成
我在不同的步骤上阻塞:1:如何恢复用户输入的email地址,并将其传递给upload.php2:如何将上传的图片添加为附件并发送给用户3:如何保持状态信息在设备上显示?
这里有人遇到过同样的问题吗?有人用过这个Mosync应用吗?
谢谢你的帮助
在upload.php文件下面使用:
<?php
ini_set("display_errors", "1");
ini_set("log_errors", "1");
error_reporting(-1);
function mylog($message)
{
$file = 'mylog.txt';
// Open the file to get existing content
$current = file_get_contents($file);
// Append a line to the file
$current .= "$messagen";
// Write the contents back to the file
file_put_contents($file, $current);
}
function uploadPhoto()
{
$targetPath = "test/" . basename($_FILES["file"]["name"]);
if (fileIsOK($_FILES["file"]))
{
$success = move_uploaded_file($_FILES["file"]["tmp_name"], $targetPath);
if ($success)
{
echo "The file " . basename($_FILES["file"]["name"]) .
" has been uploaded";
}
else
{
echo "There was an error uploading the file";
}
}
else
{
echo "Not a valid image file";
}
}
function fileIsOK($file)
{
return $file["size"] < 1500000
&& fileIsImage($file["name"]);
}
function fileIsImage($path)
{
return endsWith($path, ".jpeg")
|| endsWith($path, ".jpg")
|| endsWith($path, ".png");
}
function endsWith($haystack, $needle)
{
$expectedPosition = strlen($haystack) - strlen($needle);
return strripos($haystack, $needle, 0) === $expectedPosition;
}
function getPhotoURLs()
{
/*// For debugging.
$urls = getLastTenPhotoURLs();
foreach ($urls as $url)
{
echo "<a href='$url'>$url</a><br/>n";
}*/
echo getPhotoURLsAsJSON();
}
function getPhotoURLsAsJSON()
{
$urls = getLastTenPhotoURLs();
return json_encode($urls);
}
// Gets last TEN photo urls.
function getLastTenPhotoURLs()
{
$baseURL = "http:THE URL WHERE PHOTOS WILL BE POSTED";
$baseDir = "test/";
$files = array();
// Add files to table using last mod time as key.
if ($handle = opendir($baseDir))
{
while (false !== ($file = readdir($handle)))
{
if ("." != $file && ".." != $file)
{
$files[filemtime($baseDir . $file)] = $file;
}
}
closedir($handle);
}
// Sort by mod time.
ksort($files);
// Last ones first.
$files = array_reverse($files);
// List if URLs.
$urls = array();
// Create a list of URLs to the most recent files.
$fileCounter = 0;
foreach ($files as $file)
{
++$fileCounter;
// We only get TEN recent files (100 is too many!).
if ($fileCounter > 10)
{
// TODO: Move excessive files to an archive directory?
break;
}
array_push($urls, $baseURL . $file);
}
return $urls;
}
function sendHTMLemail($HTML,$from,$to,$subject)
{
$url="http:THE URL OF THE POSTED PHOTOS;
$mailto .= 'THE EMAIL OF THE USER';
$HTML="
<table style='font-size:13px' width='700' border='0' cellspacing='0' cellpadding='3'>
<tr>
<td colspan='2'>Dear friend,<br></td>
</tr>
<tr>
<td colspan='2' bgcolor='#ffffff'>Attached, you will find the picture taken during our last event.</strong></td>
</tr>
<tr>
<td colspan='2' bgcolor='#ffffff' width='250' >link to the <a href=".$url.">gallery</a></td>
</tr>
</table>";
$from='<noreply@noreply.be>';
$subject='Picture';
$to= $mailto;
$headers = "From: $fromrn";
$headers .= "MIME-Version: 1.0rn";
$headers .= //"--$boundaryrn".
"Content-Type: text/html; charset=ISO-8859-1rn";
//"Content-Transfer-Encoding: base64rnrn";
mail($to,$subject,$HTML,$headers);
}
// If file data is posted then upload the file,
// else get the list of image urls.
if (isset($_FILES["file"]))
{
sendHTMLemail($HTML,$from,$to,$subject);
uploadPhoto();
}
else
{
getPhotoURLs();
}
?>
1:如何将邮箱地址传递给upload.php?
首先,从HTML页面的字段中获取电子邮件地址。我假设您在page-camera.html中添加了一个输入字段。修改以下调用以传递来自邮件地址字段的值:
mosync.nativeui.callJS(
mosync.nativeui.MAIN_WEBVIEW,
"app.uploadPhoto('" + mFileURL + "','" + emailAddress + "')");
这将调用index.html中的app.uploadPhoto函数,并使用带有邮件地址的新额外参数,因此它也需要修改。而不是使用选项。参数= null;使用如下内容:
app.uploadPhoto = function(fileURL, emailAddress)
{
var options = new FileUploadOptions();
options.fileKey = "file";
options.fileName = fileURL.substr(fileURL.lastIndexOf('/') + 1);
options.mimeType = app.getMimeType(options.fileName);
//options.params = null;
options.params = { email: emailAddress };
// ... and the rest of the code for the function.
}
参数表的一般形式如下:
options.params = {param1: "value1", param2: "value2"};
然后在PHP脚本中,您可以像这样访问电子邮件地址:
$emailAddress = $_POST["email"];
2:上传的图片如何添加为附件发送给用户?
也许这些问题能帮到你:
在邮件正文中插入图像PHP发送电子邮件与图像如何在邮件中使用php附加和显示图像?
3:如何保持状态信息在设备上显示?
可能是PHP脚本中有一个错误,导致它失败,并且从未执行uploadPhoto。你能调试一下,看看是不是这样吗?
你返回的是echo输出的字符串,它将在应用程序中传递给JavaScript。
当前PhotoGallery应用程序不显示这个字符串,但它应该显示。在index.html中,而不是使用:
alert("Photo uploaded");
应该用
alert(result.response);
通过这种方式,您可以检查结果并传回数据,如果您希望直接将结果字符串显示给用户