2015-09-28 43 views
0

我想从服务器下载一个文件与进展。这里是我试过的代码:Alamofire下载文件与进展问题

let destination: (NSURL, NSHTTPURLResponse) -> (NSURL) = { 
    (temporaryURL, response) in 
    if let directoryURL = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)[0] as? NSURL { 
     let path = directoryURL.URLByAppendingPathComponent(response.suggestedFilename!) 
     return path 
    } 
    return temporaryURL 
} 

Alamofire.download(.GET, fileUrls[button.tag], destination: destination) 
.progress { _, totalBytesRead, totalBytesExpectedToRead in 
    dispatch_async(dispatch_get_main_queue()) { 
     println("\(Float(totalBytesRead)) - \(Float(totalBytesExpectedToRead))") 

     if totalBytesRead == totalBytesExpectedToRead { 
      println("******************************") 
      println("finished") 
      println("******************************") 
     } 
    } 
} 
.response { (_, _, data, error) in 
    println(data) 
    println(error) 
} 

totalBytesExpectedToRead总是-1。我搜索了这个问题,发现服务器端的Content-Length没有设置。

我已经尝试设置它,但它似乎不工作:

$attachment_location = $_GET["filepath"]; 
if (file_exists($attachment_location)) { 
    header('Content-Description: File Transfer'); 
    header('Content-Type:' . mime_content_type($attachment_location)); 
    header('Content-Disposition: attachment; filename='.basename($attachment_location)); 
    header('Content-Transfer-Encoding: binary'); 
    header('Expires: 0'); 
    header('Cache-Control: must-revalidate'); 
    header('Pragma: public'); 
    header('Content-Length: ' . filesize($attachment_location)); 
    readfile($attachment_location); 
    die(); 
} else { 
    die("Error: File not found."); 
} 

有没有人告诉我,我做错了什么?谢谢。

+0

试图用REST客户寻找如果服务器返回'内容length'。 – rshev

回答

0

的代码更改为此解决:

$attachment_location = $_GET["filepath"]; 
if (file_exists($attachment_location)) { 
    header('Content-Description: File Transfer'); 
    header('Content-Type:' . mime_content_type($attachment_location)); 
    header('Content-Disposition: attachment; filename='.basename($attachment_location)); 
    header('Content-Transfer-Encoding: binary'); 
    header('Expires: 0'); 
    header('Cache-Control: must-revalidate'); 
    header('Pragma: public'); 
    header('Content-Encoding: chunked'); 
    header('Content-Length: ' . filesize($attachment_location), true); 
    readfile($attachment_location); 
    die(); 
} else { 
    die("Error: File not found."); 
}