这些图像可以加载到本地ENV中,也可以加载到生产环境中。但是,没有任何理由,暂存环境无法加载这些。
<package id="ImageProcessor" version="2.2.0.0" targetFramework="net45" />
<package id="ImageProcessor.Web" version="4.2.1.0" targetFramework="net45" />
<package id="ImageProcessor.Web.Config" version="2.2.0.0" targetFramework="net45" />
<package id="ImageProcessor.Web.Plugins.AzureBlobCache" version="1.0.0.0" targetFramework="net45" />
<package id="ImageProcessor.Web.PostProcessor" version="1.0.2.0" targetFramework="net45" />
<package id="UmbracoAzureBlobStorageProvider" version="1.0.10.5" targetFramework="net45" />
<package id="WindowsAzure.Storage" version="4.3.0" targetFramework="net45" />
我正在使用ImageProcessor,并根据需要将域列入白名单:
<whitelist>
<add url="http://conceptjp.blob.core.windows.net/"/>
<add url="https://az739977.vo.msecnd.net/"/>
</whitelist>
https://cjp.local/remote.axd?https://az739977.vo.msecnd.net/media/6883/logo-sparitual.png?quality=70(作品,当地环境)
2016-10-04 13:31:11.2393 Logging.TheLogger The remote server returned an error: (403) Forbidden. The remote server returned an error: (403) Forbidden. at Microsoft.WindowsAzure.Storage.Core.Executor.Executor.EndExecuteAsync[T](IAsyncResult result)
at Microsoft.WindowsAzure.Storage.Core.Util.AsyncExtensions.<>c__DisplayClass1`1.<CreateCallback>b__0(IAsyncResult ar)
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at ImageProcessor.Web.Plugins.AzureBlobCache.AzureBlobCache.<IsNewOrUpdatedAsync>d__2.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at ImageProcessor.Web.HttpModules.ImageProcessingModule.<ProcessImageAsync>d__10.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.TaskAsyncHelper.EndTask(IAsyncResult ar)
at System.Web.HttpApplication.AsyncEventExecutionStep.OnAsyncEventCompletion(IAsyncResult ar)
答案 0 :(得分:11)
我不知道该在这说什么。几乎所有东西都以我不会期望或推荐的方式使用。
如果您在Azure上使用Umbraco,则应为您的媒体使用以下插件。
https://github.com/JimBobSquarePants/UmbracoFileSystemProviders.Azure
你使用的FileSystemProvider
已经过时了大约一年半。它实际上建议在其主页上使用上面提到的插件。
新包装UmbracoFileSystemProviders.Azure在线! 见:https://our.umbraco.org/projects/collaboration/umbracofilesystemprovidersazure/
我推荐它而不是这个,特别是如果你在Umbraco 7.3或更高版本。它解决了你在后台办公室会遇到的很多问题。
https://our.umbraco.org/projects/backoffice-extensions/azure-blob-storage-provider
原因是原始提供商存在缺陷,如果没有完全重写就无法修复。
在开始使用数据库之前,您必须更换媒体引用,以从存储的URL中删除域。我个人建议从头开始重建您的媒体部分。
GitHub页面上有全面的说明,但我会在下面列出它们。
首先。卸载旧插件,将所有ImageProcessor库更新到最新版本并安装推荐的FileSystemProvider
插件
然后使用以下内容更新~/Config/FileSystemProviders.config
替换默认提供程序:
<?xml version="1.0"?>
<FileSystemProviders>
<Provider alias="media" type="Our.Umbraco.FileSystemProviders.Azure.AzureBlobFileSystem, Our.Umbraco.FileSystemProviders.Azure">
<Parameters>
<add key="containerName" value="media" />
<add key="rootUrl" value="http://[myAccountName].blob.core.windows.net/" />
<add key="connectionString" value="DefaultEndpointsProtocol=https;AccountName=[myAccountName];AccountKey=[myAccountKey]"/>
<!--
Optional configuration value determining the maximum number of days to cache items in the browser.
Defaults to 365 days.
-->
<add key="maxDays" value="365" />
</Parameters>
</Provider>
</FileSystemProviders>
您现在需要配置CloudImageService
以捕获以/ media /
<?xml version="1.0"?>
<security>
<services>
<service name="LocalFileImageService" type="ImageProcessor.Web.Services.LocalFileImageService, ImageProcessor.Web"/>
<service prefix="media/" name="CloudImageService" type="ImageProcessor.Web.Services.CloudImageService, ImageProcessor.Web">
<settings>
<setting key="Container" value="media"/>
<setting key="MaxBytes" value="8194304"/>
<setting key="Timeout" value="30000"/>
<setting key="Host" value="http://[myAccountName].blob.core.windows.net/media"/>
</settings>
</service>
</services>
确保您的缓存配置设置正确。
<caching currentCache="AzureBlobCache">
<caches>
<!-- Disk cache configuration removed for brevity -->
<cache name="AzureBlobCache" type="ImageProcessor.Web.Plugins.AzureBlobCache.AzureBlobCache, ImageProcessor.Web.Plugins.AzureBlobCache" maxDays="365">
<settings>
<!-- The Account, Container and CDN details -->
<setting key="CachedStorageAccount" value="DefaultEndpointsProtocol=https;AccountName=[CacheAccountName];AccountKey=[CacheAccountKey]"/>
<setting key="CachedBlobContainer" value="cache"/>
<!-- Whether to add the container name to the CDN url. Newer Azure formats require false. -->
<setting key="UseCachedContainerInUrl" value="true"/>
<!-- Full CDN root url e.g http://123456.vo.msecnd.net/ -->
<setting key="CachedCDNRoot" value="[CdnRootUrl]"/>
<!-- Optional setting for a timeout limit in milliseconds when attempting to communicate with the CDN url. -->
<setting key="CachedCDNTimeout" value="1000"/>
<!--
Optional settings for better identifcation of source images if stored in
Azure blob storage.
-->
<setting key="SourceStorageAccount" value=""/>
<setting key="SourceBlobContainer" value=""/>
<!--
Optional settings facilitate streaming of the blob resource directly instead of a redirect. This is beneficial
for CDN purposes but caution should be taken if not used with a CDN as it will add quite a bit of overhead
to the site.
-->
<setting key="StreamCachedImage" value="false"/>
</settings>
</cache>
</caches>
</caching>
现在应该只使用根相对/media/
路径创建映像请求,内置的虚拟路径提供程序将拦截并相应地进行处理。
例如/media/1046/car-small.jpg?width=500&height=500&mode=boxpad&bgcolor=hotpink