Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 保存图像的HTML5 URL在单击时显示以前创建的图像_Javascript_Html - Fatal编程技术网

Javascript 保存图像的HTML5 URL在单击时显示以前创建的图像

Javascript 保存图像的HTML5 URL在单击时显示以前创建的图像,javascript,html,Javascript,Html,我有一个HTML5应用程序,它将画布图像保存到服务器,然后提供一个指向该图像的链接,并在新窗口中打开 这在我第一次保存它时效果很好,但是如果我创建并保存一个新图像,然后单击链接,它会显示以前创建的旧图像 单击refresh将强制它显示新的图像,但我想知道是否有办法确保它显示正确的图像,这样我就不必刷新页面了 下面是我用来保存图像的内容 <script> function saveImageAs (imgOrURL) { if (typeof imgOrURL == 'object')

我有一个HTML5应用程序,它将画布图像保存到服务器,然后提供一个指向该图像的链接,并在新窗口中打开

这在我第一次保存它时效果很好,但是如果我创建并保存一个新图像,然后单击链接,它会显示以前创建的旧图像

单击refresh将强制它显示新的图像,但我想知道是否有办法确保它显示正确的图像,这样我就不必刷新页面了

下面是我用来保存图像的内容

<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()
try
imgOrURL=imgOrURL.src+'?rnd='+new Date().getTime()
。提供使用
rand()
md5()
sha1()
的解决方案会更好吗??还有日期,还有一个。提供使用
rand()
md5()
sha1()
的解决方案会更好吗??还有日期。