Chỉ cần tự hỏi có cách nào tôi có thể kiểm tra xem các liên kết url đến một hình ảnh hợp lệ hay không ở Django.Django: kiểm tra xem một hình ảnh có tồn tại ở một số url cụ thể không?
Trả lời
Đây là phương pháp không an toàn. Đầu tiên, phân tích cú pháp url để nhận miền và phần còn lại.
>>> from urllib.parse import urlparse
>>> url = 'http://example.com/random/folder/path.html'
>>> parse_object = urlparse(url)
>>> parse_object.netloc
'example.com'
>>> parse_object.path
'/random/folder/path.html'
>>> parse_object.scheme
'http'
Bây giờ, hãy sử dụng thông tin trên để nhận loại nội dung. Sử dụng parse_object.netloc
thay vì sstatic.net và parse_object.path
thay vì đường dẫn được mã cứng.
>>> import httplib
>>> conn = httplib.HTTPConnection("sstatic.net")
>>> conn.request("HEAD", "/stackoverflow/img/favicon.ico")
>>> res = conn.getresponse()
>>> print res.getheaders()
[('content-length', '1150'), ('x-powered-by', 'ASP.NET'), ('accept-ranges', 'bytes'), ('last-modified', 'Mon, 02 Aug 2010 06:04:04 GMT'), ('etag', '"2187d82832cb1:0"'), ('cache-control', 'max-age=604800'), ('date', 'Sun, 12 Sep 2010 13:39:26 GMT'), ('content-type', 'image/x-icon')]
Điều này cho bạn biết đó là hình ảnh (image/* mime-type) là 1150 byte. Đủ thông tin để bạn quyết định xem bạn có muốn tìm nạp toàn bộ tài nguyên hay không.
EDIT
Đối với các url rút ngắn, như http://goo.gl/IwruD
mà điểm đến http://ubuntu.icafebusiness.com/images/ubuntugui2.jpg
, trong phản ứng mà bạn nhận được, có một tham số bổ sung được gọi 'location'
.
Đây là những gì tôi đang nói về:
>>> import httplib
>>> conn = httplib.HTTPConnection("goo.gl")
>>> conn.request("HEAD", "/IwruD")
>>> res = conn.getresponse()
>>> print res.getheaders()
[('x-xss-protection', '1; mode=block'),
('x-content-type-options', 'nosniff'),
('transfer-encoding', 'chunked'),
('age', '64'),
('expires', 'Mon, 01 Jan 1990 00:00:00 GMT'),
('server', 'GSE'),
('location', 'http://ubuntu.icafebusiness.com/images/ubuntugui2.jpg'),
('pragma', 'no-cache'),
('cache-control', 'no-cache, no-store, max-age=0, must-revalidate'),
('date', 'Sat, 30 Jun 2012 08:52:15 GMT'),
('x-frame-options', 'SAMEORIGIN'),
('content-type', 'text/html; charset=UTF-8')]
Trong khi trong url trực tiếp, bạn sẽ không tìm thấy nó.
>>> import httplib
>>> conn = httplib.HTTPConnection("ubuntu.icafebusiness.com")
>>> conn.request("HEAD", "/images/ubuntugui2.jpg")
>>> res = conn.getresponse()
>>> print res.getheaders()
[('content-length', '78603'), ('accept-ranges', 'bytes'), ('server', 'Apache'), ('last-modified', 'Sat, 16 Aug 2008 01:36:17 GMT'), ('etag', '"1fb8277-1330b-45489c3ad2640"'), ('date', 'Sat, 30 Jun 2012 08:55:46 GMT'), ('content-type', 'image/jpeg')]
Bạn có thể tìm kiếm rằng việc sử dụng một mã đơn giản:
>>> r = res.getheaders()
>>> redirected = False
>>> for e in r:
>>> if(e[0] == 'location'):
>>> redirected = e
>>>
>>> if(redirected != False):
>>> print redirected[1]
'http://ubuntu.icafebusiness.com/images/ubuntugui2.jpg'
Trình thông dịch viên python của tôi có nội dung "ImportError: Không có module nào được phân tích cú pháp". Phương pháp của bạn không thành công ở Bước 1.Bất cứ ý tưởng nào? –
Tìm thấy nó, Bạn đang sử dụng python 3 trong khi tôi vẫn đang sử dụng python 2.7 :) –
Một nghi ngờ nữa, giả sử 'http://ubuntu.icafebusiness.com/images/ubuntugui2.jpg' là url và tôi rút ngắn nó bằng cách sử dụng google url shortner để nó bây giờ trở thành 'http://goo.gl/IwruD'.Now trên url này rút ngắn phương pháp của bạn không hoạt động, nó nói "ResponseNotReady". Nói gì? –
Cách đơn giản để kiểm tra điều này bằng cách sử dụng urllib2.
>>> import urllib2
>>> url = 'https://www.google.com.pk/images/srpr/logo3w.png'
>>> try:
... f = urllib2.urlopen(urllib2.Request(url))
... imageFound = True
... except:
... imageFound = False
...
>>> imageFound
True
Sử dụng requests và PIL để xác minh rằng nó thực sự là một hình ảnh hợp lệ:
>>> import requests
>>> from PIL import Image
>>> from StringIO import StringIO
>>> r = requests.get('http://cdn.sstatic.net/stackoverflow/img/sprites.png')
>>> im = Image.open(StringIO(r.content))
>>> im
<PIL.PngImagePlugin.PngImageFile image mode=RGBA size=238x1073 at 0x2845EA8>
Điều gì sẽ xảy ra nếu hình ảnh không có ở đó? sẽ mã của bạn sụp đổ hoặc bạn sẽ phải kiểm tra một số thuộc tính của im? Bạn có thể cập nhật mã của bạn thành một hàm trả về boolean không? – Radu
'r.status_code' sẽ không là 200 – jterrace
Có ngoài mã trạng thái HTTP, Image.open nên ném một số loại lỗi mà tôi đang suy nghĩ? PIL không phải là rất hữu ích trong việc này ... Tôi cũng nhìn vào http://effbot.org/imagingbook/image.htm#tag-Image.Image.verify nhưng không thể tìm ra những gì để sử dụng. – Radu
- 1. kiểm tra xem hình ảnh có tồn tại không php
- 2. Tôi có thể kiểm tra xem tệp có tồn tại ở URL không?
- 3. Tôi có thể kiểm tra xem tệp có tồn tại ở URL không?
- 4. jQuery: Kiểm tra xem hình ảnh có tồn tại
- 5. Cách kiểm tra xem hình ảnh có tồn tại với url đã cho không?
- 6. Kiểm tra xem URL có tồn tại hay không
- 7. python: kiểm tra xem url có tồn tại jpg không.
- 8. Cách kiểm tra xem tệp có tồn tại từ url
- 9. Kiểm tra xem một webservice có tồn tại
- 10. kiểm tra xem tệp có tồn tại trong một thư mục cụ thể
- 11. Cách PHP đúng để kiểm tra xem hình ảnh bên ngoài có tồn tại không?
- 12. Kiểm tra xem url kho svn không tồn tại
- 13. Cách kiểm tra xem một URL có tồn tại hay trả lại 404 bằng Java không?
- 14. Kiểm tra xem bảng có tồn tại
- 15. Kiểm tra xem một tập tin là một hình ảnh
- 16. Kiểm tra xem tôi đã kết nối với một tín hiệu cụ thể ở Django
- 17. Kiểm tra xem hình ảnh có tồn tại trong gói không - iPhone
- 18. Cách tìm hiểu xem một hình ảnh có tồn tại trong một gói không?
- 19. Kiểm tra xem một đối tượng có tồn tại
- 20. Làm cách nào để kiểm tra xem URL đã cho của hình ảnh có tồn tại bằng GWT không?
- 21. Kiểm tra xem tệp có tồn tại không và liệu tệp có chứa một chuỗi cụ thể
- 22. Cách kiểm tra xem hình ảnh có tồn tại trong Rails không?
- 23. hoa nhài - cách kiểm tra xem một đối số có tồn tại không?
- 24. cách kiểm tra xem địa chỉ email cụ thể có tồn tại trong C# không?
- 25. Kiểm tra xem phiên có tồn tại không JSF
- 26. C# Kiểm tra url tồn tại?
- 27. Postgresql: Kiểm tra xem lược đồ có tồn tại không?
- 28. JQuery/Javascript: kiểm tra xem var có tồn tại không
- 29. Kiểm tra xem một chuỗi có chứa một từ nhưng chỉ ở vị trí cụ thể không?
- 30. CQL: cách kiểm tra xem keyspace có tồn tại không?
Nếu hình ảnh là trên cùng một máy như Django, sau đó bạn chỉ có thể đọc các tập tin và xác nhận nó. Nếu không, thì bạn phải thực hiện cuộc gọi REST và phân tích cú pháp kết quả. – freakish
Hình ảnh không tồn tại trên cùng một máy như Django.Tôi thực sự có một hình thức mà người dùng cần gửi một url của một số image.I chỉ muốn kiểm tra xem url đó có liên kết đến bất kỳ hình ảnh thực tế nào hay không. –
Đọc phần này: http://stackoverflow.com/questions/7699796/how-do-you-get-django-to-make-a-restful-call (có thể trùng lặp). – freakish