uiimageview - af_setimage - load image alamofire swift
¿SDWebImage y configuración de encabezados HTTP personalizados? (5)
Acabo de cambiar mi código para almacenar en caché las imágenes de EGOImageCache a SDWebView. Desafortunadamente, no sé cómo configurar encabezados HTTP personalizados, ya que tengo que enviar la autenticación para poder recuperar imágenes. Fue fácil hacerlo con EGOImageCache ya que extendí la solicitud NSURL en el lugar apropiado. Pero no sé cómo hacerlo con el SDWebView.framework. Veo los encabezados y he encontrado métodos en SDWebImageDownloader.h que contienen
/**
* Set a value for a HTTP header to be appended to each download HTTP request.
*
* @param value The value for the header field. Use `nil` value to remove the header.
* @param field The name of the header field to set.
*/
- (void)setValue:(NSString *)value forHTTPHeaderField:(NSString *)field;
/**
* Returns the value of the specified HTTP header field.
*
* @return The value associated with the header field field, or `nil` if there is no corresponding header field.
*/
- (NSString *)valueForHTTPHeaderField:(NSString *)field;
Parece que la biblioteca soporta encabezados HTTP. Pero a medida que uso UIImageView + WebCache.hi no puedo ver una opción para configurar los encabezados. En mi codigo llamo
[self.imageView setImageWithURL:[NSURL URLWithString:themeImageURL] placeholderImage:[UIImage imageNamed:@"placeholder.png"]];
¿Alguien puede decirme cómo configurar encabezados HTTP?
Swift 4.1
let manager = SDWebImageManager.shared().imageDownloader
manager?.setValue("oAuthToken",forHTTPHeaderField: "AuthHeaderName")
manager?.downloadImage(with: imageURL, options: SDWebImageDownloaderOptions.useNSURLCache, progress:
{ (receivedSize, expectedSize , url) in
// progression tracking code
}, completed: { (image,data , error,finished) in
if error == nil && image != nil {
// here the downloaded image is cached, now you need to set it to the imageView
DispatchQueue.main.async {
imageView.image = image
self.maskCircle(anyImage: image!)
}
} else {
// handle the failure
DispatchQueue.main.async {
let defaultImage = UIImage(named: "defaultImage")
imageView.image = defImage
self.maskCircle(anyImage: defImage)
}
}
})
Estoy usando la autenticación básica y la configuración del username
y la password
en el sharedDownloader
ayudó a:
SDWebImageDownloader *downloader = [SDWebImageDownloader sharedDownloader];
downloader.username = @"username";
downloader.password = @"password";
Sé que es bastante viejo pero no pude evitar compartir lo que funcionó para mí. Necesitaba establecer un valor de token de inicio de sesión para el encabezado logintoken
. Entonces, esta pieza de código hizo lo que yo quería -
NSString *loginToken = // Some method to fetch login token
[SDWebImageDownloader.sharedDownloader setValue:loginToken forHTTPHeaderField:@"logintoken"];
Tuve el mismo problema, y traté de hacer:
SDWebImageDownloader *manager = [SDWebImageDownloader sharedDownloader];
[manager setValue:username forHTTPHeaderField:@"X-Oauth-Username"];
Pero los encabezados no fueron enviados. Después de algunos intentos, encontré el problema, SDWebImageDownloader en sharedDownloader crea una nueva instancia de SDWebImageDownloader, por lo que cuando coloca el encabezado en esa instancia, la instancia que realmente descarga la imagen no tiene el encabezado.
He resuelto hacer esto:
SDWebImageDownloader *manager = [SDWebImageManager sharedManager].imageDownloader;
[manager setValue:username forHTTPHeaderField:@"X-Oauth-Username"];
Versión rápida
let imageDownloader = SDWebImageDownloader.shared()
imageDownloader.setValue("Username", forHTTPHeaderField: "X-Oauth-Username")