我正在尝试从下面的URL下载图片。在接收到状态代码200文件后被成功下载,但是如果状态代码是301,那么它将在标题中给我一个新的URL,但是从那个URL下载失败。
步骤1 : https://www.lancecamper.com/images/trailers/lance-rv-trailers-1475s-din-2018.jpg
响应:
{ URL: https://www.lancecamper.com/images/trailers/lance-rv-trailers-1475s-din-2018.jpg }
{ status code: 200, headers {
"Accept-Ranges" = bytes;
"Cache-Control" = "public,max-age=7776000";
"Content-Length" = 224200;
"Content-Type" = "image/jpeg";
Date = "Tue, 27 Mar 2018 04:52:30 GMT";
Etag = "\"5bea410a65dd31:0\"";
"Last-Modified" = "Wed, 15 Nov 2017 00:09:27 GMT";
Server = "Microsoft-IIS/8.5";
"X-Powered-By" = "ASP.NET";
}}Status =成功下载.
步骤2 : http://www.lancecamper.com/images/trailers/TT 响应:
{ URL: http://www.lancecamper.com/images/trailers/TT_1685_Int_hero.jpg }
{ status code: 301, headers {
"Content-Length" = 187;
"Content-Type" = "text/html; charset=UTF-8";
Date = "Tue, 27 Mar 2018 05:18:45 GMT";
Location = "https://www.lancecamper.com/images/trailers/TT_1685_Int_hero.jpg";
Server = "Microsoft-IIS/8.5";
"X-Powered-By" = "ASP.NET";
}}当我获得状态301时,我还会在“Location”标题中获得新的URL,并且我无法使用该URL下载该文件。它显示了成功状态,但告诉我不支持这种格式。它在android系统中工作,我不知道为什么。
Status =成功下载,但不支持映像的格式.
发布于 2018-03-27 05:54:15
@ilesh尝试使用以下UIImageView扩展方法:
// Download image with given URL and Placeholder image is used when downloading failed.
public func imageFromURL(string: String?, placeholderImageName: String?, completion: ((Bool) -> Void)?) {
if let placeholderImageName = placeholderImageName {
self.image = UIImage(named: placeholderImageName)
}
else {
self.image = nil
}
//Set unique identifier to check re-usability condition
let strUniqueIdentifier = "\(abs(string?.hashValue ?? (UUID().uuidString.hashValue)))"
if self.accessibilityLabel != strUniqueIdentifier {
if let request = self.accessibilityElements?.first as? DataRequest {
//A download task is already in progress so cancel it
request.cancel()
self.accessibilityElements?.removeAll()
}
}
self.accessibilityLabel = strUniqueIdentifier
guard let url = URL(string: string?.replacingOccurrences(of: " ", with: "%20") ?? "")
else {
print("\(#function)No url specified")
if let completion = completion {
completion(false)
}
return
}
let activityView = addActivityIndicator(toView: self)
var mutableRequest = URLRequest(url: url)
mutableRequest.cachePolicy = NSURLRequest.CachePolicy.returnCacheDataElseLoad
let request =
Alamofire
.request(mutableRequest)
.response { (response) in
DispatchQueue.main.async(execute: {
activityView.removeFromSuperview()
})
var success = false
if response.response?.statusCode == 200 {
let strUniqueIdentifier_Closure = self.accessibilityLabel
if strUniqueIdentifier == strUniqueIdentifier_Closure {
success = true
}
else {
success = false
debugPrint("Unable to set image: uniqueIdentifier check failed")
}
if success, let data = response.data {
DispatchQueue.main.async(execute: {
self.image = UIImage(data: data)
})
}
}
if let completion = completion {
completion(success)
}
}
self.accessibilityElements = [request]
}
private func addActivityIndicator(toView view: UIView) -> UIView {
let sizeOfActivityContainer: CGFloat = 36.0
let vwContainer = UIView(frame: CGRect(x: 0,
y: 0,
width: sizeOfActivityContainer,
height: sizeOfActivityContainer))
vwContainer.backgroundColor = #colorLiteral(red: 0, green: 0, blue: 0, alpha: 0.3)
vwContainer.tag = 100
vwContainer.layer.cornerRadius = sizeOfActivityContainer/2
vwContainer.layer.masksToBounds = true
vwContainer.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(vwContainer)
vwContainer.addConstraint(NSLayoutConstraint(item: vwContainer,
attribute: .height,
relatedBy: .equal,
toItem: nil,
attribute: .notAnAttribute,
multiplier: 1,
constant: sizeOfActivityContainer))
vwContainer.addConstraint(NSLayoutConstraint(item: vwContainer,
attribute: .width,
relatedBy: .equal,
toItem: nil,
attribute: .notAnAttribute,
multiplier: 1,
constant: sizeOfActivityContainer))
view.addConstraint(NSLayoutConstraint(item: vwContainer,
attribute: .centerX,
relatedBy: .equal,
toItem: view,
attribute: .centerX,
multiplier: 1,
constant: 0))
view.addConstraint(NSLayoutConstraint(item: vwContainer,
attribute: .centerY,
relatedBy: .equal,
toItem: view,
attribute: .centerY,
multiplier: 1,
constant: 0))
let activityIndicator = UIActivityIndicatorView.init(activityIndicatorStyle: .white)
activityIndicator.startAnimating()
activityIndicator.translatesAutoresizingMaskIntoConstraints = false
vwContainer.addSubview(activityIndicator)
vwContainer.addConstraint(NSLayoutConstraint(item: activityIndicator,
attribute: .centerX,
relatedBy: .equal,
toItem: vwContainer,
attribute: .centerX,
multiplier: 1,
constant: 0))
vwContainer.addConstraint(NSLayoutConstraint(item: activityIndicator,
attribute: .centerY,
relatedBy: .equal,
toItem: vwContainer,
attribute: .centerY,
multiplier: 1,
constant: 0))
return vwContainer
}发布于 2018-03-27 07:55:59
问题在于链接本身的hero.jpg。而不是返回它重定向到https://www.lancecamper.com的图像。
https://stackoverflow.com/questions/49505077
复制相似问题