我需要在服务器上上传一张图片,而不使用html表单标记。有简单的方法吗。事实上,我一直在构建一个应用程序,用户可以上传自己的照片,也可以从网络摄像头上拍摄一张新照片,如果用户点击上传按钮,照片就会移动到服务器上。当用户上传图片并按下上传按钮时,它工作得很好,因为我一直在使用类型为"文件"的HTML输入标签,但当我从网络摄像头拍摄图片并在HTML5画布标签上渲染时,我单击上传按钮,没有图片移到服务器,因为输入标签中没有文件。在这两种情况下,我都使用相同的画布元素和img标记来向用户显示它。
有没有一种方法可以在不使用表单元素的情况下上传,或者有没有一个方法可以将我从Canavas元素获得的图像对象分配到相同的表单输入元素中??
所有答案都欢迎
提前感谢
服务器端代码
function bytesToSize1024($bytes, $precision = 2) {
$unit = array('B','KB','MB');
return @round($bytes / pow(1024, ($i = floor(log($bytes, 1024)))), $precision).' '.$unit[$i];
}
$sFileName = $_FILES['image_file']['name'];
$sFileType = $_FILES['image_file']['type'];
$sFileSize = bytesToSize1024($_FILES['image_file']['size'], 1);
$target = "upload/";
$target = $target . basename( $_FILES['uploaded']['name']) ;
$ok=1;
$error=$_FILES["image_file"]["error"];
$uploaddir = '/var/www/example119/upload/';
$uploadfile = $uploaddir . basename($_FILES['image_file']['name']);
if(!empty($_FILES))
{
if(move_uploaded_file($_FILES['image_file']['tmp_name'], "$target$sFileName"))
{
echo "The file ". basename( $_FILES['image_file']['name']). " has been uploaded...";
}
else {
echo "Sorry, there was a problem uploading your file. {$error}";
}
}
else
{
echo "_files is empty";
}
Javascipt代码以进行HTTPrequest
function startUploading() {
// cleanup all temp states
iPreviousBytesLoaded = 0;
var oProgress = document.getElementById('progress');
oProgress.style.display = 'block';
oProgress.style.width = '0px';
// get form data for POSTing
//var vFD = document.getElementById('upload_form').getFormData(); // for FF3
var vFD = new FormData(document.getElementById('upload_form')); // this is for when user upload from browser box
var vvFD=document.getElementById('preview1'); //added by TODO to test
// create XMLHttpRequest object, adding few event listeners, and POSTing our data
var oXHR = new XMLHttpRequest();
oXHR.upload.addEventListener('progress', uploadProgress, false);
oXHR.addEventListener('load', uploadFinish, false);
oXHR.addEventListener('error', uploadError, false);
oXHR.addEventListener('abort', uploadAbort, false);
oXHR.open('POST', 'example_upload/upload.php');
//oXHR.send(vFD);
oXHR.send(vvFD);
// set inner timer
oTimer = setInterval(doInnerUpdates, 300);
}
也许您应该尝试通过POST发送图像数据。它没有任何大小限制,内容可以遵循任何格式。
不,没有表单标记就无法上传。有些变通方法似乎使用Ajax,例如iframe或使用Flash。
如果您不想使用表单元素,那么您将如何接受用户的输入?你可以使用Flash、Java,但这只会让你的工作更加困难。。我可能建议使用表单输入,使用Javascript处理它,然后将其发送到PHP Uploader Script。您可以将用户重定向到该PHP页面并在那里完成工作,也可以使用AJAX并取一个表示新上传图像的整数,然后将它插入数据库或存储它们的任何位置,并向用户显示他的新图像。。