我有一个网络摄像头,它每两分钟将捕获的图像上传到网站,只是替换最后一个。我制作了一个 Powershell 脚本,每两分钟下载一次该图像,一切正常。但有时它会不同步,因为来自网络摄像头的上传使用 3G 数据连接,我猜有时在每个文件之间只有两分钟的时间上传会很慢。因此,当网络摄像头仍在进行上传时,我的脚本有时会下载半张图像。
有没有办法在我下载之前确保网络摄像头图像已完全上传?
我试图让它在下载的图像中查找文件大小,如果它低于一定大小,它将立即被删除并保持我的下载文件夹从“垃圾”中清除,但由于图像有时大小不同,它不是一个非常可靠的方法去做吧。
那么,如何让脚本在下载之前检查图像是否已完全上传?
这是我现在的代码
$imgNum = 0
while ($true)
{
cls
$storageDir = "C:\Temp\Norberg"
$url = "http://www.norberg.se/images/webcam/bild/image.jpg"
$file = "$storageDir\norberg_$(Get-Date -Format "yyyyMMdd-HHmmss").jpg"
Write-Host "---------------------------------------------------------------" -Fore "yellow"
Write-Host " Location: Norberg - Mimerlaven" -Fore "yellow"
Write-Host " Input: $url" -Fore "yellow"
Write-Host " Output: $file" -Fore "yellow"
Write-Host "---------------------------------------------------------------" -Fore "yellow"
$webclient = New-Object System.Net.WebClient
$webclient.DownloadFile($url,$file)
$numUp = ++$imgNum
$lastFile = gci $storageDir | sort LastWriteTime | select -last 1
$lastFileSize = $lastFile.Length
if ($lastFileSize -lt 100kb) {remove-item $storageDir"\"$lastFile}
Write-Host "Number of pictures taken: $imgNum" -Fore "yellow"
Write-Host "Last file size: "($lastFile.Length / 1KB) Kb -fore "yellow"
$x = 2*60
$length = $x / 100
while($x -gt 0) {
$min = [int](([string]($x/60)).split('.')[0])
$text = " " + $min + " minutes " + ($x % 60) + " seconds left"
Write-Progress "Tar nästa bild om..." -status $text -perc ($x/$length)
start-sleep -s 1
$x--
}
}
这个脚本的目的是我想捕捉图像以制作延时视频,最初是 24 小时,但在未来我想每天一到两张图像,并制作一整年的延时视频以查看季节变化。