小编Cri*_*ila的帖子

CarrierWave可以上传到Amazon S3但是通过CloudFront服务吗?

我正在开发一个小型的rails网站,允许一些用户上传图像,其他用户可以看到它们.我开始使用CarrierWave和S3作为存储介质,一切都运行良好,但后来我想尝试使用CanFront.我首先distribution在我的S3存储桶中添加了一个,然后将我正在使用的CarrierWave配置更改为:

CarrierWave.configure do |config|
  config.storage = :fog
  config.fog_credentials = {
    :provider               => 'AWS',                                         # required
    :aws_access_key_id      => ENV['S3_ACCESS_KEY_ID'],                       # required
    :aws_secret_access_key  => ENV['S3_SECRET_ACCESS_KEY'],                   # required
    :region                 => 'eu-west-1',
  }
  config.asset_host = 'http://static.my-domain.com/some-folder'
  config.fog_public     = true                                   # optional, defaults to    true
  config.fog_attributes = {'Cache-Control'=>'max-age=315576000'}  # optional, defaults to {}
end
Run Code Online (Sandbox Code Playgroud)

我应该提一下,它http://static.my-domain.com是一个指向CloudFront端点(some-id.cloudfront.net)的CNAME条目.结果是图片显示正确,URL看起来像这样:http://static.my-domain.com/some-folder/uploads/gallery_image/attachment/161/large_image.jpg但每当我尝试上传照片或者就此而言,获得上传附件的大小时,我会得到以下异常:

Excon::Errors::MovedPermanently: Expected(200) <=> Actual(301 Moved Permanently)
  response => #<Excon::Response:0x007f61fc3d1548 @data={:body=>"", 
  :headers=>{"x-amz-request-id"=>"some-id", "x-amz-id-2"=>"some-id", 
  "Content-Type"=>"application/xml", "Transfer-Encoding"=>"chunked", 
  "Date"=>"Mon, 31 Mar 2014 21:16:45 GMT", "Connection"=>"close", "Server"=>"AmazonS3"}, …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails carrierwave amazon-cloudfront

9
推荐指数
1
解决办法
2637
查看次数

如何在MVC4 RC WebApi中注册自定义模型绑定器

我最近从MVC4 beta更新到了RC,并遇到了一个WebApi项目的小问题.我注意到的第一件事就是ServiceResolver被删除了.在删除之前,我使用它以下列方式注册自定义模型绑定提供程序:

IEnumerable<object> modelBinderProviderServices = GlobalConfiguration.Configuration.ServiceResolver.GetServices(typeof(ModelBinderProvider));
List<Object> services = new List<object>(modelBinderProviderServices) { new CustomDynamicObjectModelBinderProvider() };
GlobalConfiguration.Configuration.ServiceResolver.SetServices(typeof(ModelBinderProvider), services.ToArray());
Run Code Online (Sandbox Code Playgroud)

利用此模型绑定程序提供程序的操作具有以下签名:

[HttpPut]
public void Put(CustomDynamicObject model)
Run Code Online (Sandbox Code Playgroud)

我尝试用以下代码替换旧代码,但没有结果:

GlobalConfiguration.Configuration.Services.Add(typeof(ModelBinderProvider), new CustomDynamicObjectModelBinderProvider());
Run Code Online (Sandbox Code Playgroud)

当我尝试将数据PUT到给定的动作时,不调用模型提供者的GetBinder方法,并且模型参数设置为null.通过将Acion /方法的签名更改为以下内容,我能够使用ModelBinder属性使操作使用想要的模型绑定器

[HttpPut]
public void Put([ModelBinder(typeof(CustomDynamicObjectModelBinderProvider))] CustomDynamicObject model)
Run Code Online (Sandbox Code Playgroud)

虽然这有效但我真的不想在我的所有控制器/动作中使用这种语法.

我想我应该提一下我的模型绑定器提供程序继承自:

System.Web.Http.ModelBinding.ModelBinderProvider
Run Code Online (Sandbox Code Playgroud)

我这样说是因为我看到以下命名空间中有另一个ModelBinderProvider类:

Microsoft.Web.Mvc.ModelBinding
Run Code Online (Sandbox Code Playgroud)

回顾一下:如何在MVC4 RC WebApi中注册自定义模型绑定器?

c# asp.net-mvc-4 asp.net-web-api

2
推荐指数
1
解决办法
6953
查看次数