我正在使用 NSSessionDownloadTask 下载大型 mp4。我已经多次使用 NSURLSessions 并且没有遇到任何问题,但是这次有些事情让我感到难过......
我这样开始请求:
NSURLRequest *downloadRequest = [NSURLRequest requestWithURL:url];
self.sessionConfig = [NSURLSessionConfiguration defaultSessionConfiguration];
self.sessionConfig.timeoutIntervalForRequest = 60;
self.urlSession = [NSURLSession sessionWithConfiguration:self.sessionConfig delegate:self delegateQueue:nil];
self.downloadTask = [self.urlSession downloadTaskWithRequest:downloadRequest];
[self.downloadTask resume];
它首先调用:
- (void) URLSession:downloadTask:didWriteData:totalBytesWritten:totalBytesExpectedToWrite:
我得到的响应头是:
{ status code: 206, headers {
"Accept-Ranges" = bytes;
"Cache-Control" = "max-age=604800";
Connection = "keep-alive";
"Content-Length" = 1001;
"Content-Range" = "bytes 0-1000/566368944";
"Content-Type" = "video/mp4";
Date = "Wed, 29 Jul 2015 11:10:41 GMT";
Etag = "\"21c21ab0-4f46826b4c580\"";
Expires = "Wed, 05 Aug 2015 11:10:41 GMT";
"Last-Modified" = "Wed, 12 Mar 2014 12:41:10 GMT";
Server = Apache;
}
然后它立即调用:
- (void) URLSession:downloadTask:didFinishDownloadingToURL:
..请求结束.!
我错过了什么?谢谢
最佳答案
这不是缓存问题。您的服务器实现了 Range header 。这将帮助您确定上次请求中发送了多少数据。此请求将不断发送数据,直到到达 content-Length。这是您文件的完整大小。您需要在请求中发送 Range header 并相应地处理响应。
例如
"Accept-Ranges" = bytes;
"Cache-Control" = "max-age=71726";
Connection = "keep-alive";
"Content-Length" = 34538928;
"Content-Type" = "text/plain";
Date = "Mon, 04 Jan 2016 10:23:10 GMT";
Etag = "\"2681502-20f05b0-51966ce4c0380\"";
Expires = "Tue, 05 Jan 2016 06:18:36 GMT";
"Last-Modified" = "Fri, 26 Jun 2015 07:37:02 GMT";
Server = Apache;
我首先请求了视频 URL 我收到了上面的标题。几秒钟后它开始下载我停止了这个过程并重新启动了应用程序我得到了下面的标题信息
"Accept-Ranges" = bytes;
"Cache-Control" = "max-age=71726";
Connection = "keep-alive";
"Content-Length" = 34536357;
"Content-Range" = "bytes 2571-34538927/34538928";
"Content-Type" = "text/plain";
Date = "Mon, 04 Jan 2016 10:23:58 GMT";
Etag = "\"2681502-20f05b0-51966ce4c0380\"";
Expires = "Tue, 05 Jan 2016 06:19:24 GMT";
"Last-Modified" = "Fri, 26 Jun 2015 07:37:02 GMT";
Server = Apache;
如果您观察两个 header ,您会在第二个 header “Content-Range”中找到这意味着您的文件已下载“bytes 2571”字节,大小为 34538927。然后它将根据您的网络速度发送另一个类似“23672”字节的数据包。
这个“Range”和“Content-range”将帮助您以恢复方式下载大文件。
例。假设有 100MB 的文件,您在此网络连接丢失后下载了 90MB 的数据。然后你需要从头开始下载文件。
要在“范围”和“内容长度”的帮助下避免这种情况,您可以保存用户数据。
希望你会明白
关于ios - NSSessionDownloadTask 上的 206 内容范围响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31698932/
我需要读入一个包含数字列表的文件。此代码读取文件并将其放入二维数组中。现在我需要获取数组中所有数字的平均值,但我需要将数组的内容更改为int。有什么想法可以将to_i方法放在哪里吗?ClassTerraindefinitializefile_name@input=IO.readlines(file_name)#readinfile@size=@input[0].to_i@land=[@size]x=1whilex 最佳答案 只需将数组映射为整数:@land边注如果你想得到一条线的平均值,你可以这样做:values=@input[x]
我想设置一个默认日期,例如实际日期,我该如何设置?还有如何在组合框中设置默认值顺便问一下,date_field_tag和date_field之间有什么区别? 最佳答案 试试这个:将默认日期作为第二个参数传递。youcorrectlysetthedefaultvalueofcomboboxasshowninyourquestion. 关于ruby-on-rails-date_field_tag,如何设置默认日期?[rails上的ruby],我们在StackOverflow上找到一个类似的问
请帮助我理解范围运算符...和..之间的区别,作为Ruby中使用的“触发器”。这是PragmaticProgrammersguidetoRuby中的一个示例:a=(11..20).collect{|i|(i%4==0)..(i%3==0)?i:nil}返回:[nil,12,nil,nil,nil,16,17,18,nil,20]还有:a=(11..20).collect{|i|(i%4==0)...(i%3==0)?i:nil}返回:[nil,12,13,14,15,16,17,18,nil,20] 最佳答案 触发器(又名f/f)是
我是一个Rails初学者,但我想从我的RailsView(html.haml文件)中查看Ruby变量的内容。我试图在ruby中打印出变量(认为它会在终端中出现),但没有得到任何结果。有什么建议吗?我知道Rails调试器,但更喜欢使用inspect来打印我的变量。 最佳答案 您可以在View中使用puts方法将信息输出到服务器控制台。您应该能够在View中的任何位置使用Haml执行以下操作:-puts@my_variable.inspect 关于ruby-on-rails-如何在我的R
我将我的Rails应用程序部署到OpenShift,它运行良好,但我无法在生产服务器上运行“Rails控制台”。它给了我这个错误。我该如何解决这个问题?我尝试更新rubygems,但它也给出了权限被拒绝的错误,我也无法做到。railsc错误:Warning:You'reusingRubygems1.8.24withSpring.UpgradetoatleastRubygems2.1.0andrun`gempristine--all`forbetterstartupperformance./opt/rh/ruby193/root/usr/share/rubygems/rubygems
我正在尝试从Postgresql表(table1)中获取数据,该表由另一个相关表(property)的字段(table2)过滤。在纯SQL中,我会这样编写查询:SELECT*FROMtable1JOINtable2USING(table2_id)WHEREtable2.propertyLIKE'query%'这工作正常:scope:my_scope,->(query){includes(:table2).where("table2.property":query)}但我真正需要的是使用LIKE运算符进行过滤,而不是严格相等。然而,这是行不通的:scope:my_scope,->(que
我刚刚被困在这个问题上一段时间了。以这个基地为例:moduleTopclassTestendmoduleFooendend稍后,我可以通过这样做在Foo中定义扩展Test的类:moduleTopmoduleFooclassSomeTest但是,如果我尝试通过使用::指定模块来最小化缩进:moduleTop::FooclassFailure这失败了:NameError:uninitializedconstantTop::Foo::Test这是一个错误,还是仅仅是Ruby解析变量名的方式的逻辑结果? 最佳答案 Isthisabug,or
这里有一个很好的答案解释了如何在Ruby中下载文件而不将其加载到内存中:https://stackoverflow.com/a/29743394/4852737require'open-uri'download=open('http://example.com/image.png')IO.copy_stream(download,'~/image.png')我如何验证下载文件的IO.copy_stream调用是否真的成功——这意味着下载的文件与我打算下载的文件完全相同,而不是下载一半的损坏文件?documentation说IO.copy_stream返回它复制的字节数,但是当我还没有下
我是Google云的新手,我正在尝试对其进行首次部署。我的第一个部署是RubyonRails项目。我基本上是在关注thisguideinthegoogleclouddocumentation.唯一的区别是我使用的是我自己的项目,而不是他们提供的“helloworld”项目。这是我的app.yaml文件runtime:customvm:trueentrypoint:bundleexecrackup-p8080-Eproductionconfig.ruresources:cpu:0.5memory_gb:1.3disk_size_gb:10当我转到我的项目目录并运行gcloudprevie
我正在尝试解析一个CSV文件并使用SQL命令自动为其创建一个表。CSV中的第一行给出了列标题。但我需要推断每个列的类型。Ruby中是否有任何函数可以找到每个字段中内容的类型。例如,CSV行:"12012","Test","1233.22","12:21:22","10/10/2009"应该产生像这样的类型['integer','string','float','time','date']谢谢! 最佳答案 require'time'defto_something(str)if(num=Integer(str)rescueFloat(s