2016-10-05 30 views
1

这些图像可以在本地ENV中加载,也可以在生产ENV中加载。但是,无论如何,暂存环境无法加载这些内容。ImageProcessor/Windows Azure存储问题,返回403 Forbidden

<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://staging.conceptjp.com/remote.axd?https://az739977.vo.msecnd.net/media/6883/logo-sparitual.png?quality=70(没有工作)

https://conceptjp.com/remote.axd?https://az739977.vo.msecnd.net/media/6883/logo-sparitual.png?quality=70(作品)

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

答案是将服务器上的时钟设置为UTC。 http://stackoverflow.com/questions/22828279/403-error-in-production-from-windowsazure-storage –

回答

8

我不知道该说些什么。几乎所有的东西都以我不期望也不推荐的方式使用。

如果您在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

这样做的原因是,原来的供应商有缺陷可能无法修复没有完全重写。

  1. 媒体使用绝对URL存储在数据库中。这意味着相同的媒体不能在多个环境中使用。
  2. 媒体在后台下载并显示为未处理。这导致100 MB的数据被不必要地下载,从而破坏了大型网站的性能。

您必须在数据库入门之前更换媒体参考,以从存储的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配置捕获与/媒体开始/所有请求

<?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

+0

你认为这是时间问题之前[https://conceptjp.com]图像disapear? –

+0

我不明白你在问什么,我很害怕。 –

+0

@JamesSouth - 我假设他问他是否可以跳过您提供给他的修复的后半部分,并且只是等待人们更新足够的图像以使数据库中没有绝对URL。 听起来像很多角落在这里:\ –