2016-01-05 29 views
0

所以我有一張40,000張照片的表格。他們都被保存了,但是對於他們中的一些人,當我在表格中使用他們的路徑時,圖像實際上並未保存在服務器上。如何獲取在服務器上未找到/保存的所有ImageField列表?

這隻發生在一些時間,所以我想獲得所有這些照片的列表,以便我可以獲取它們並手動將它們保存在我的服務器上。

我想獲取這些照片的ID或某種標識符,因爲在我的表中,我也有圖片的源URL,所以這只是在所有源URL上使用wget的問題全部下載。

因此,例如,該表可能有3行:

photos/abc.jpg 
photos/def.jpg 
photos/ghi.jpg 

photos/abc.jpg會被發現,photos/def.jpg會被發現,但photos/ghi.jpg不會在照片文件夾,找到時,它應該是。

如何獲取在ImageField中指定位置的服務器上找不到的所有圖像名稱或ID的列表。

+0

那麼你的問題是什麼? –

+0

@ShangWang添加更多詳情 – User

回答

0

只是做一個循環從數據庫數據,並檢查文件是否具有功能

file_exists() 

存在如果該函數返回false上服務器,因此未找到文件你可以把它添加到陣列比你有名單沒有文件的所有數據庫記錄在服務器

+0

Django是一種Python語言。我不知道PHP。 – User

0

茶這個

#change to the directory where dir photo is 

$ cd /xx/yy 
$ find photos/ -name \*.[Jj][Pp][Gg] -exec echo "insert IGNORE into tmptable VALUE(\"{}\");" \; >images.sql 

# now you have a file image.sql where all insert in 
# like: 
# insert IGNORE into tmptable VALUE("photo/aa.jpg"); 
# insert IGNORE into tmptable VALUE("photo/aaac.jpg"); 

# Start mysql client 

$ mysql -uroot -pXXXXXXX 
> use yourDatabase; 

# create a Table 

> CREATE TABLE `tmptable` (
    `image` varchar(250) DEFAULT NULL, 
    UNIQUE KEY `d` (`image`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

# Import the file 

> \. images.sql 

# Now you can select the tmptable and join your table to find your missing images 
0

遍歷表和檢查每個項目,如果是它的一個文件。

如果沒有找到文件,則從源代碼下載(然後在每次下載後等待兩秒鐘,您不想泛洪源服務器)。

import urllib 

for pic in Pictures.objects.all(): 
    if not pic.get_filename().exists(): 
     url = pic.get_source_url() 
     urllib.urlretrieve(url, filename=pic.get_filename()) 

添加您自己get_filename()get_source_url()方法。

由於這是一個Django問題:您可能希望爲您的Django應用程序設置a management command,因此在將來,您可以輕鬆地從CLI或甚至通過cronjob運行它,以自動修復丟失的圖像。

相關問題