【问题标题】:How can I download only the first kilobyte of content of a URL with PowerShell?如何使用 PowerShell 仅下载 URL 的第一千字节内容?
【发布时间】:2019-11-13 08:45:39
【问题描述】:

我的主要目标是定期轮询由 PaaS 提供商 (Azure) 托管的文件,以防止它变冷。这是一个 600K+ 的 pdf,所以如果我每分钟轮询一次,这可能会每月生成大量数据(超过 20GB)。

我尝试的两种方法都执行数据的完整下载:

  1. Invoke-WebRequest -Uri https://app.whatever.com/docs/staywarm.pdf
  2. ((New-Object Net.WebClient).DownloadString('https://app.whatever.com/staywarm.pdf'))

我只想获得前 1K,甚至只是前 100 个字节。我的理论是即使这样也应该保持该文件温暖。


我已经打开了“始终开启”。所以有趣的是,PDF 仍然经常需要 20 秒才能开始下载。命名的 PDF BTW 是一份服务条款 PDF,用户必须在登录前接受。因此,当它必须下载应用程序时,它本身就应该是热的,因为与登录页面相关的所有文件(HTML、CSS、JS)都必须提供给浏览器。所以我认为像大 PDF 这样的单个文件可以保持冷态,尽管应用程序本身是温暖的?

【问题讨论】:

  • 这是 Web 应用程序池停止的情况,还是托管文件的服务?即,如果它是需要保持温暖的应用程序池,请在您定期访问的网站上有一个空的 0 字节文件以最小化数据。
  • #2 已接近。您可以调用WebClient.OpenRead(),然后在返回的Stream 上调用Read() 一次,使用您想要的任何大小的缓冲区。

标签: powershell azure-web-app-service downloadstring invoke-webrequest


【解决方案1】:

您可以打开Always On 选项:

它将防止您的应用因不活动而闲置


如果您仍想使用您的方式,您可以只编写程序以使您的网络应用程序响应一个特定路径的空字符串。例如:在.NET web应用程序中,可以直接响应路径'/check'的一个OK动作结果。

【讨论】:

  • 谢谢,这是一个很好的建议,我已经打开了“始终开启”。所以有趣的是,PDF 仍然经常需要 20 秒才能开始下载。命名的 PDF BTW 是一份服务条款 PDF,用户必须在登录前接受。因此,当它必须下载应用程序时,它本身就应该是热的,因为与登录页面相关的所有文件(HTML、CSS、JS)都必须提供给浏览器。所以我认为像大 PDF 这样的单个文件可以保持冷态,尽管应用程序本身是温暖的?
【解决方案2】:

目前我正在执行这个脚本:

$wc = (New-Object Net.WebClient).OpenRead('https://app.whatever.com/docs/staywarm.pdf')
$tr = New-Object -TypeName System.IO.StreamReader -ArgumentList $wc
$tr.ReadLine()
$tr.Close()

【讨论】:

  • 我不能 100% 确定这不会下载整个文档。目前,我将大型文件托管在不冷的第三方场所。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-28
相关资源
最近更新 更多