Javascript 保存图像的HTML5 URL在单击时显示以前创建的图像
我有一个HTML5应用程序,它将画布图像保存到服务器,然后提供一个指向该图像的链接,并在新窗口中打开 这在我第一次保存它时效果很好,但是如果我创建并保存一个新图像,然后单击链接,它会显示以前创建的旧图像 单击refresh将强制它显示新的图像,但我想知道是否有办法确保它显示正确的图像,这样我就不必刷新页面了 下面是我用来保存图像的内容Javascript 保存图像的HTML5 URL在单击时显示以前创建的图像,javascript,html,Javascript,Html,我有一个HTML5应用程序,它将画布图像保存到服务器,然后提供一个指向该图像的链接,并在新窗口中打开 这在我第一次保存它时效果很好,但是如果我创建并保存一个新图像,然后单击链接,它会显示以前创建的旧图像 单击refresh将强制它显示新的图像,但我想知道是否有办法确保它显示正确的图像,这样我就不必刷新页面了 下面是我用来保存图像的内容 <script> function saveImageAs (imgOrURL) { if (typeof imgOrURL == 'object')
<script>
function saveImageAs (imgOrURL) {
if (typeof imgOrURL == 'object')
imgOrURL = imgOrURL.src;
window.win = open (imgOrURL);
setTimeout('win.document.execCommand("SaveAs")', 500);
}
</script>
<script type="text/javascript">
//****************************************************************
// Save canvas content into image file. //
//****************************************************************
function saveViaAJAX()
{
document.getElementById('saveimage').style.visibility="hidden";
document.getElementById("debugFilenameConsole").innerHTML="Please wait while your image is been generated";
var testCanvas = document.getElementById('canvas');
var canvasData = testCanvas.toDataURL("image/jpg");
var postData = "canvasData="+canvasData;
var debugConsole= document.getElementById("debugConsole");
debugConsole.value=canvasData;
//alert("canvasData ="+canvasData );
var ajax = new XMLHttpRequest();
ajax.open("POST",'savecanvas.php',true);
ajax.setRequestHeader('Content-Type', 'canvas/upload');
//ajax.setRequestHeader('Content-TypeLength', postData.length);
ajax.onreadystatechange=function()
{
if (ajax.readyState == 4)
{
//alert(ajax.responseText);
// Write out the filename.
document.getElementById("debugFilenameConsole").innerHTML="Saved as <a target='_blank' href='myimage.php'> MyImage.jpg"+ajax.responseText+"</a><br>Reload this page to start a new image or click on the link above to open the file.";
}
}
ajax.send(postData);
}
</script>
函数saveImageAs(imgOrURL){
如果(imgOrURL的类型=='object')
imgOrURL=imgOrURL.src;
window.win=打开(imgOrURL);
setTimeout('win.document.execCommand(“SaveAs”)”,500);
}
//****************************************************************
//将画布内容保存到图像文件中//
//****************************************************************
函数saveViaAJAX()
{
document.getElementById('saveimage').style.visibility=“hidden”;
document.getElementById(“debugFilenameConsole”).innerHTML=“正在生成图像,请稍候”;
var testCanvas=document.getElementById('canvas');
var canvasData=testCanvas.toDataURL(“image/jpg”);
var postData=“canvasData=”+canvasData;
var debugConsole=document.getElementById(“debugConsole”);
debugConsole.value=canvasData;
//警报(“canvasData=“+canvasData”);
var ajax=new-XMLHttpRequest();
open(“POST”,“savecanvas.php”,true);
setRequestHeader('Content-Type','canvas/upload');
//setRequestHeader('Content-TypeLength',postData.length);
ajax.onreadystatechange=function()
{
if(ajax.readyState==4)
{
//警报(ajax.responseText);
//写出文件名。
document.getElementById(“debugFilenameConsole”).innerHTML=“另存为
重新加载此页面以启动新图像,或单击上面的链接以打开文件。”;
}
}
发送(postData);
}
还有PHP
<?php
if (isset($GLOBALS["HTTP_RAW_POST_DATA"]))
{
// Get the data
$imageData=$GLOBALS['HTTP_RAW_POST_DATA'];
// Remove the headers (data:,) part.
// A real application should use them according to needs such as to check image type
$filteredData=substr($imageData, strpos($imageData, ",")+1);
// Need to decode before saving since the data we received is already base64 encoded
$unencodedData=base64_decode($filteredData);
//echo "unencodedData".$unencodedData;
// Save file. This example uses a hard coded filename for testing,
// but a real application can specify filename in POST variable
$fp = fopen( 'MyImage.jpg', 'wb' );
fwrite( $fp, $unencodedData);
fclose( $fp );
}
header("Content-Type: image/jpg");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("content-disposition: attachment; filename=MyImage.jpg");
imagejpeg($img, null, 100);
?>
因为您为图像指定了相同的名称和路径,所以浏览器会为您缓存图像
使用唯一的路径来避免这种情况 因为您为图像指定了相同的名称和路径,所以浏览器会帮您缓存图像 使用唯一的路径来避免这种情况 你可以试试
var random=new Date();
var random2=getTime();
var rand=random+random2;
imgOrURL = imgOrURL.src+'?rnd='+rand
还是PHP
$rand=rand();
MyImage.php?rand=<?=$rand?>
供日后使用,避免头痛。首先添加日期和时间,因为使用md5
、sha1()
或rand()
或JavaScript唯一键可能是一场噩梦,例如:
/// This is much cleaner
/11.1.2012/11.05/eachier93.jpg
/11.1.2012/11.05/4358390485/93.jpg
/11.1.2012/11.10/3249203489834/234234.jpg
/// then this
/files/342748234234234/234982348394/333535.jpg
/files/4535345345/234234234234/3332.jpg
/files/23423434324/023840348234/2343.jpg
你可以试试
var random=new Date();
var random2=getTime();
var rand=random+random2;
imgOrURL = imgOrURL.src+'?rnd='+rand
还是PHP
$rand=rand();
MyImage.php?rand=<?=$rand?>
供日后使用,避免头痛。首先添加日期和时间,因为使用md5
、sha1()
或rand()
或JavaScript唯一键可能是一场噩梦,例如:
/// This is much cleaner
/11.1.2012/11.05/eachier93.jpg
/11.1.2012/11.05/4358390485/93.jpg
/11.1.2012/11.10/3249203489834/234234.jpg
/// then this
/files/342748234234234/234982348394/333535.jpg
/files/4535345345/234234234234/3332.jpg
/files/23423434324/023840348234/2343.jpg
尝试
imgOrURL=imgOrURL.src+'?rnd='+new Date().getTime()
tryimgOrURL=imgOrURL.src+'?rnd='+new Date().getTime()
。提供使用rand()
或md5()
或sha1()
的解决方案会更好吗??还有日期,还有一个。提供使用rand()
或md5()
或sha1()
的解决方案会更好吗??还有日期。