Try your search with a different keyword or use * as a wildcard.
using Microsoft.AspNetCore.Http;
using Nop.Core;
using Nop.Core.Domain.Media;
using Nop.Core.Infrastructure;
namespace Nop.Services.Media;
///
/// Picture thumb service
///
public partial class ThumbService : IThumbService
{
#region Fields
protected readonly IHttpContextAccessor _httpContextAccessor;
protected readonly INopFileProvider _fileProvider;
protected readonly IWebHelper _webHelper;
protected readonly MediaSettings _mediaSettings;
#endregion
#region Ctor
public ThumbService(IHttpContextAccessor httpContextAccessor,
INopFileProvider fileProvider,
IWebHelper webHelper,
MediaSettings mediaSettings)
{
_httpContextAccessor = httpContextAccessor;
_fileProvider = fileProvider;
_webHelper = webHelper;
_mediaSettings = mediaSettings;
}
#endregion
#region Methods
///
/// Delete picture thumbs
///
/// Picture
/// A task that represents the asynchronous operation
public virtual async Task DeletePictureThumbsAsync(Picture picture)
{
var filter = $"{picture.Id:0000000}*.*";
var currentFiles = _fileProvider.GetFiles(_fileProvider.Combine(_fileProvider.GetLocalImagesPath(_mediaSettings), NopMediaDefaults.ImageThumbsPath), filter, false);
foreach (var currentFileName in currentFiles)
{
var thumbFilePath = await GetThumbLocalPathByFileNameAsync(currentFileName);
_fileProvider.DeleteFile(thumbFilePath);
}
}
///
/// Get picture (thumb) local path
///
/// Filename
///
/// A task that represents the asynchronous operation
/// The task result contains the local picture thumb path
///
public virtual Task GetThumbLocalPathByFileNameAsync(string thumbFileName)
{
var thumbsDirectoryPath = _fileProvider.Combine(_fileProvider.GetLocalImagesPath(_mediaSettings), NopMediaDefaults.ImageThumbsPath);
if (_mediaSettings.MultipleThumbDirectories)
{
//get the first two letters of the file name
var fileNameWithoutExtension = _fileProvider.GetFileNameWithoutExtension(thumbFileName);
if (fileNameWithoutExtension != null && fileNameWithoutExtension.Length > NopMediaDefaults.MultipleThumbDirectoriesLength)
{
var subDirectoryName = fileNameWithoutExtension[..NopMediaDefaults.MultipleThumbDirectoriesLength];
thumbsDirectoryPath = _fileProvider.Combine(_fileProvider.GetLocalImagesPath(_mediaSettings), NopMediaDefaults.ImageThumbsPath, subDirectoryName);
_fileProvider.CreateDirectory(thumbsDirectoryPath);
}
}
var thumbFilePath = _fileProvider.Combine(thumbsDirectoryPath, thumbFileName);
return Task.FromResult(thumbFilePath);
}
///
/// Get a value indicating whether some file (thumb) already exists
///
/// Thumb file path
/// Thumb file name
///
/// A task that represents the asynchronous operation
/// The task result contains the check result
///
public virtual Task GeneratedThumbExistsAsync(string thumbFilePath, string thumbFileName)
{
return Task.FromResult(_fileProvider.FileExists(thumbFilePath));
}
///
/// Get a picture thumb local path
///
/// Picture URL
///
/// A task that represents the asynchronous operation
/// The task result contains the local picture thumb path
///
public virtual async Task GetThumbLocalPathAsync(string pictureUrl)
{
if (string.IsNullOrEmpty(pictureUrl))
return string.Empty;
return await GetThumbLocalPathByFileNameAsync(_fileProvider.GetFileName(pictureUrl));
}
///
/// Save a picture thumb
///
/// Thumb file path
/// Thumb file name
/// MIME type
/// Picture binary
/// A task that represents the asynchronous operation
public virtual async Task SaveThumbAsync(string thumbFilePath, string thumbFileName, string mimeType, byte[] binary)
{
//ensure \thumb directory exists
var thumbsDirectoryPath = _fileProvider.Combine(_fileProvider.GetLocalImagesPath(_mediaSettings), NopMediaDefaults.ImageThumbsPath);
_fileProvider.CreateDirectory(thumbsDirectoryPath);
//save
await _fileProvider.WriteAllBytesAsync(thumbFilePath, binary);
}
///
/// Get picture (thumb) URL
///
/// Filename
/// Store location URL; null to use determine the current store location automatically
///
/// A task that represents the asynchronous operation
/// The task result contains the local picture thumb path
///
public virtual Task GetThumbUrlAsync(string thumbFileName, string storeLocation = null)
{
var pathBase = _httpContextAccessor.HttpContext?.Request.PathBase.Value ?? string.Empty;
var imagesPathUrl = _mediaSettings.UseAbsoluteImagePath ? storeLocation : $"{pathBase}/";
imagesPathUrl = string.IsNullOrEmpty(imagesPathUrl) ? _webHelper.GetStoreLocation() : imagesPathUrl;
imagesPathUrl += "images/thumbs/";
if (_mediaSettings.MultipleThumbDirectories)
{
//get the first two letters of the file name
var fileNameWithoutExtension = _fileProvider.GetFileNameWithoutExtension(thumbFileName);
if (fileNameWithoutExtension != null && fileNameWithoutExtension.Length > NopMediaDefaults.MultipleThumbDirectoriesLength)
{
var subDirectoryName = fileNameWithoutExtension[..NopMediaDefaults.MultipleThumbDirectoriesLength];
imagesPathUrl = imagesPathUrl + subDirectoryName + "/";
}
}
imagesPathUrl += thumbFileName;
return Task.FromResult(imagesPathUrl);
}
///
/// Gets the information about thumbs
///
///
/// A task that represents the asynchronous operation
/// The task result contains the thumbs file count and size
///
public virtual async Task<(int filesCount, long filesSize)> GetThumbsInfoAsync()
{
var filesCount = 0;
var filesSize = 0L;
var currentFiles = _fileProvider.GetFiles(_fileProvider.Combine(_fileProvider.GetLocalImagesPath(_mediaSettings), NopMediaDefaults.ImageThumbsPath), topDirectoryOnly: false);
foreach (var currentFileName in currentFiles)
{
if (currentFileName.EndsWith("placeholder.txt"))
continue;
filesCount++;
var thumbFilePath = await GetThumbLocalPathByFileNameAsync(currentFileName);
filesSize += _fileProvider.FileLength(thumbFilePath);
}
return (filesCount, filesSize);
}
///
/// Delete all thumbs
///
/// A task that represents the asynchronous operation
public virtual async Task DeleteAllThumbsAsync()
{
var currentFiles = _fileProvider.GetFiles(_fileProvider.Combine(_fileProvider.GetLocalImagesPath(_mediaSettings), NopMediaDefaults.ImageThumbsPath), topDirectoryOnly: false);
foreach (var currentFileName in currentFiles)
{
if (currentFileName.EndsWith("placeholder.txt"))
continue;
var thumbFilePath = await GetThumbLocalPathByFileNameAsync(currentFileName);
_fileProvider.DeleteFile(thumbFilePath);
}
foreach (var directory in _fileProvider.GetDirectories(_fileProvider.Combine(_fileProvider.GetLocalImagesPath(_mediaSettings), NopMediaDefaults.ImageThumbsPath)))
_fileProvider.DeleteDirectory(directory);
}
#endregion
}