我想在下载之前或者最初启动时检测文件的文件大小(以字节为单位)。棘手的部分是我使用第三方SDK与Web服务进行交互。他们没有提供获取文件大小的方法。我想知道是否有可能拦截后期响应以确定总文件大小?可能是在黑暗中拍摄..
public void getExport(string jid, bool compression)
{
bool comp = false;
while (comp == false)
{
comp = _eb.IsComplete(jid);
}
//capture filesize of download & report back???????????
byte[] b = this._eb.Retrieve(jid, compression);
this._eb.Delete(jid);
this._ws.Destroy();
this._export = b;
}
在上面的脚本中,我已经构建了一个导出,它在服务器上保存为Job。此过程返回作业ID或jid。然后,该脚本通过将jid传递给retrieve方法来启动下载。这将返回一个byte []。由于他们不提供此功能,我可以将所有这些包含在内,以便我可以适当地更新进度条。
答案 0 :(得分:2)
您可以使用http中的HEAD VERB获取资源的元数据
例如,如果您要在以下位置下载.pdf文件
您使用以下命令
HEAD“https://www.depts.ttu.edu/upwardbound/books/the-7-habits-ofhighly-effective-people.pdf”
如果您看到内容长度将指定要下载的文件大小,则不会下载该文件将返回以下信息。
Accept-Ranges→字节 内容长度→777476 内容类型→application / pdf 日期→星期一,2017年2月13日20:32:29 GMT ETag→“9a3a29bac9ecd11:0” Last-Modified→周二,2016年8月2日14:25:32 GMT 服务器→Microsoft-IIS / 7.5 X-Powered-By→ASP.NET
你可以使用像POSTMAN这样的工具来检查这个
www.getpostman.com
此处还阅读了HEAD VERB
www.w3.org/Protocols/rfc2616/rfc2616-sec9.html