誠徵的iOS 7下載前找到一些服務器上的文件的大小...我有NSURLConnectionDelegate的方法,但它的iOS 4.3如何在iOS 7中下載文件之前查找文件的大小?
這裏後棄用了這種方法:
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
誠徵的iOS 7下載前找到一些服務器上的文件的大小...我有NSURLConnectionDelegate的方法,但它的iOS 4.3如何在iOS 7中下載文件之前查找文件的大小?
這裏後棄用了這種方法:
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
您應改用NSURLConnectionDataDelegate
注:DATADelegate
及其didReceiveResponse:
方法發送HEAD request得到公正頭:
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response;
然後你就可以得到響應大小與@ Port的建議:
long long size = [response expectedContentLength];
非常感謝,非常有幫助! :) NSURLCONNECTIONDELEGATE有許多方法已棄用,現在這些方法呈現在NSURLCONNECTIONDATADELEGATE! – asadullah07
您可以使用此方法,它是通過下面的委託方法NSURLResponse對象:
-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
}
-(NSURLRequest *)connection:(NSURLConnection *)connection
willSendRequest:(NSURLRequest *)request
redirectResponse:(NSURLResponse *)response {
}
嘗試這樣的..
long long size = [response expectedContentLength];
@ user1918014你解決了你的問題 – Sport
它也被棄用。 – asadullah07
- 連接:needNewBodyStream - 連接:didSendBodyData:totalBytesWritten:totalBytesExpectedToWrite:通過的iOS 4.3 所需的方法可用在IOS 3.0 - 連接:didReceiveData:通過的iOS 4.3 所需的方法可用在IOS 2.0 - 連接:didReceiveResponse:可用在IOS要求的方法2.0到iOS 4.3 - 連接:willCacheResponse:必需的方法在iOS 2.0到iOS 4.3中可用 - 連接:willSendRequest:redirectResponse:所需的方法在iOS 2.0到iOS 4.3中可用012rd- connectionDidFinishLoading:必需的方法iOS 2.0中可用的iOS 4.3 – asadullah07
試試這個會有幫助。 。 。 。 。
-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse
*)response
{
NSHTTPURLResponse * pHttpUrlResponse = (NSHTTPURLResponse *) response;
if ([response respondsToSelector:@selector(allHeaderFields)])
{
NSString * fileLength = [NSString stringWithFormat:@"%lld",[pHttpUrlResponse expectedContentLength]];
}
}
編碼快樂:)
這是我在我的問題中列出的不贊成使用的方法。 – asadullah07
試試這個,
NSDictionary *fileAttributes = [[NSFileManager defaultManager] attributesOfItemAtPath:URL error:&attributesError];
NSNumber *fileSizeNumber = [fileAttributes objectForKey:NSFileSize];
long long fileSize = [fileSizeNumber longLongValue];
:)
這是用於已下載的文件,不適用於網絡上的文件。 – asadullah07
好的...爲此,我認爲你必須使用ftp。 –
請使用HEAD方法的請求。例如:
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"HEAD"];
該請求將與GET相同,但不返回正文。然後調用
long long size = [response expectedContentLength];
與NSURLConnection的完整示例(適用於NSURLSession過的課程):
NSURL *URL = [NSURL URLWithString:@"http://www.google.com"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:URL];
[request setHTTPMethod:@"HEAD"];
NSHTTPURLResponse *response;
[NSURLConnection sendSynchronousRequest:request returningResponse:&response error: nil];
long long size = [response expectedContentLength];
NSLog(@"%lld",size);
這也是基於Last-Modified頭有條件地下載有用的(假設服務器發送你那)。
if ([response respondsToSelector:@selector(allHeaderFields)]) {
NSString *lastModifiedString = [[response allHeaderFields] objectForKey:@"Last-Modified"];
}
對於斯威夫特使用這些步驟,
步驟1:使用NSURLConnectionDataDelegate。
class ViewController: UIViewController,NSURLConnectionDataDelegate {
步驟2:創建用於連接請求。
var request:NSMutableURLRequest = NSMutableURLRequest(URL: NSURL(string: "http://www.twitter.com")!)
// Use **HEAD** request to get http header information.
request.HTTPMethod = "HEAD"
第3步:創建連接。
var connection:NSURLConnection = NSURLConnection(request: request, delegate: self)!
第4步:使用委託方法 NSURLConnectionDataDelegate
func connection(connection: NSURLConnection, didReceiveResponse response: NSURLResponse)
{
var size = response.expectedContentLength
println("size : \(size)")
}
下面是完整的代碼...
import UIKit
class ViewController: UIViewController,NSURLConnectionDataDelegate {
override func viewDidLoad() {
super.viewDidLoad()
var request:NSMutableURLRequest = NSMutableURLRequest(URL: NSURL(string: "http://www.twitter.com")!)
request.HTTPMethod = "HEAD"
var connection:NSURLConnection = NSURLConnection(request: request, delegate: self)!
}
func connection(connection: NSURLConnection, didReceiveResponse response: NSURLResponse)
{
var size = response.expectedContentLength
println("size : \(size)")
}
}
是以字節爲單位的大小? –
@RayKing,'所以你可以在大多數現代平臺上採用字節單位,其中一個字節長度爲8位。見這裏:http://stackoverflow.com/a/31389001/3411787 –
入住這斯威夫特4解決方法:https://開頭stackoverflow.com/a/48584914/3161503 – fethica