キーに'+'
を含むS3のオブジェクトの画像をフェッチしようとすると、404が発生します。
例:
GET https://<cname>.imgix.net/E+P-003_D.jpeg // -> 404
GET https://<cname>.imgix.net/E%2BP-003_D.jpeg // -> 200
https://github.com/imgix/imgix-core-js/blob/master/src/imgix-core-js.js#L106のencodeURI
が原因だと思います。 S3キーはパスであるため、モジュールはencodeURI
を使用します。これは、 '+'
シンボルを受け入れ、それらをエンコードしません。 ただし、S3はそれらをスペースとして解釈します。
ねえ@rschweizer 、
これを持ってきてくれてありがとう。 残念ながら、 +
をエンコードすると、S3ソースを使用しないセットアップが破損するリスクがあるため、これに対する簡単な解決策はありません。 今のところ、最も簡単な解決策は、URLを生成した後に+
を個別にエンコードすることです。
client.buildURL(path, params).replace(/\+/g, '%2B')
私はそれが満足のいく答えではないことを知っていますが、私たちは現在これに対するより良い解決策を調査していることを知っています。 他にご不明な点がございましたら、お気軽にコメントしてください。 ありがとう
こんにちは@sherwinski 、
ありがとう! それは簡単な修正でもあります、私は昨日思いついた:)
よりエレガントな解決策を見つけるために何かお手伝いできることがあれば、私に知らせてください。
@rschweizer hey:wave:この問題を開いて、私たちの注意を引いてくれてありがとう。 あなたと@sherwinskiが同様の解決策を見つけてくれてうれしいです:)
将来的には、エッジケースの処理だけでなく、エンコードを実行する方法/タイミング/実行すべきでないことについて、すでに真剣に考えています。 この問題を追跡する内部ドキュメントを作成しましたが、すでにmore elegant solution
取り組んでいます。
とりあえずこれを締めくくりますが、質問、コメント、懸念がある場合は、もう一度コメント/プル/オープンしてください。
最も参考になるコメント
こんにちは@sherwinski 、
ありがとう! それは簡単な修正でもあります、私は昨日思いついた:)
よりエレガントな解決策を見つけるために何かお手伝いできることがあれば、私に知らせてください。