How to know whether it is an image or a website with a given url?

4 次查看(过去 30 天)
Hi
I have a few urls, each of which begin with 'http://' and end with '.jpg'.
Some lead to images and others lead to websites (e.g. the above url).
Is there a way to know whether each url leads to an image or a website? If it leads to an image, save it; if it leads to a website, do nothing.
Can anyone help?

采纳的回答

Guillaume
Guillaume 2017-11-22
编辑:Guillaume 2017-11-22
The way matlab (or any other web client) determine the type content of a uri is by looking at the Content-Type property returned in the header of the get (or post) request that matlab (or any other web client) send when you request that page. All of this is hidden from you by webread and websave.
Since R2016b, matlab gives you functions to get down to the nitty gritty of the http protocol. The following should work:
queryurl = 'http://anguerde.com/pics/main/2/218886-active.jpg'; %replace as required
uri = matlab.net.URI(queryuri);
request = matlab.net.http.RequestMessage;
response = request.send(uri);
contenttype = response.Header.getFields('Content-Type');
If the uri points to an image, then Content-Type should contain 'image/something', so you could do
isimage = contains(contenttype.Value, 'image/')
Note that if you need to pass query parameters, or log into the web page, or some other things, there's a lot more work that needs to be performed before the above would work.

更多回答(2 个)

Rik
Rik 2017-11-21
Would websave give an error if you try to save a page as a single file (didn't test)? In that case you could just use a try-catch-block. If not, you can just save it, and do some operations that will only work on images (like imread), wrapping that in a try-catch-block.
  1 个评论
Salad Box
Salad Box 2017-11-22
Unfortunately websave didn't give an error. As all my urls look like the example shown above, and I named all the filename something like 'apple01.jpg', or 'apple02.jpg', therefore, in case the url is an image, websave will save it as a '.jpg' file; in case the url is a website, websave will save it as a '.html' file, so I will get the file name look like 'apple01.jpg.html'. Websave saves anything on the web, if its an image, it saves the image, if its a website, websave saves the whole website. Maybe that's why its called websave not imagesave. So no it didn't give any errors, instead it just save the web.

请先登录,再进行评论。


Image Analyst
Image Analyst 2017-11-22
Try imread(). If it throws an error, it's not an image.
filename = 'http://anguerde.com/pics/main/2/218886-active.jpg';
try
rgbImage = imread(filename)
imshow(rgbImage); % Or whatever you plan on doing with the image
catch ME
fprintf('Sorry, but %s is a website, not an image.\n', filename);
end
If you don't want to view or save the image (or try to), then Guillaume's way is more direct, and maybe faster.
  1 个评论
Guillaume
Guillaume 2017-11-22
You could also simply check the extension returned by websave. In both case, the whole page is downloaded and saved to disk ( imread calls websave anyway) so yes this is going to be slower than my method. What imread (or checking the extension returned by websave) got going for it is that it's a lot more error proof than my method.

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Software Development Tools 的更多信息

标签

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by