2016-05-18 10 views
0

私はたくさんの画像URLを取得し、それらをブロブストレージに処理し、それを私のCDNにマッピングします。さて、問題は、オリジナルのURLで画像が更新されることがありますが、URLは変更されないことがあります。最初の画像の場合URLの画像が変更されたかどうかはどのようにわかりますか?

:たとえば、更新画像については

Original ImageUrl: "<websiteUrl>/image1.jpg"; 
My BlobUrl: "<bloburl>/myimage1.jpg"; 
My CDN Url: "<cdnurl>/myimage1.jpg 

のorignalのIMAGEURLは同じなので、画像のURLが更新されているかどうか私がチェックすることはできません。私はexif datetimeプロパティをチェックできると思ったが、残念ながらそれらのイメージはexifのdatetimeプロパティではない。私はEXIFに持っている唯一の情報は次のとおりです。

File Size 236 kB 
File Type JPEG 
MIME Type image/jpeg 
Image Width 1000 
Image Height 1500 
Encoding Process Baseline DCT, Huffman coding 
Bits Per Sample 8 
Color Components 3 
X Resolution 72 
Y Resolution72 
YCbCr Sub Sampling YCbCr4:2:0 (2 2) 

私の質問は、URLからの画像は、このケースで私のブロブの私のイメージと異なる場合、私が検出できるか、です。

+0

問題のWebサーバーによっては、If-Modified-SinceおよびLast-ModifiedのHTTPヘッダーを使用する場合があります。そのサーバーがLast-Modifiedを返す場合、イメージをダウンロードせずに変更されたかどうかを確認することができます。 – Evk

+0

@エヴァーク私は最初に画像を取得した日付より新しいと思われるヘッダーに 'X-Amp-Published 'を持っています。私はそれに頼ることができますか? – erincerol

+0

これは、カスタムヘッダ(カスタムヘッダはXで始まります)が来ているかどうかわかりません。どのサーバーからイメージをリクエストしますか?また、あなたの応答がETagヘッダを持っているかもしれません。 – Evk

答えて

0

ファイルのチェックサムを作成して保存する必要があります。 その後、あなたはeasillyそれが変更されているかどうかを確認するために新しいチェックサムを計算することができます。ファイルが実際に変更されたかどうかを教えてくれるよう、最初のインスタンスで

using (var md5 = MD5.Create()) 
{ 
    using (var stream = File.OpenRead(filename)) 
    { 
     return md5.ComputeHash(stream); 
    } 
} 
1

を使用すると、ファイル自体のLastModifiedの日付を確認する必要がありますあなたが最後にアクセスしたとき。次に、保存した日付より新しいファイルをリロードします。また、ファイルがほぼ確実に変更される前と同じでない場合は、ファイルのサイズを確認することもできます。

しかし、その情報を利用できない場合、これを行う唯一の方法は、画像のピクセルを比較して、それらが異なるかどうかを確認することです。

ただし、ピクセル単位で比較する必要はありません。最初にイメージを読み込んだときにイメージからチェックサムを生成し、それをURLの横にデータベースに格納するとします。次に、イメージを表示し、保存されたチェックサムと新しく計算されたチェックサムを比較する必要があるときに、プロセスを繰り返すことができます。それらが異なる場合、画像は異なる。

イメージが変更されたかどうかにかかわらず、イメージを取得する必要があるということです。

+0

'ETag'ヘッダも考えられます。 – khlr

+0

@ChrisF私はEtagヘッダーを持っていません。システムにイメージを処理しているので(解像度が変わるかもしれません)、ピクセル比較はうまくいかないでしょう。私はヘッダーに 'X-Amp-Published 'を持っていますが、私はそれらに頼ることができますか? – erincerol

+0

@erincerol - おそらく。あなたはそれを試さなければならないでしょう。ファイルを変更し、アクセスしたときにどの情報が変更されたかを確認し、 – ChrisF

関連する問題