Getting a Stream from an absolute path?

2019-03-28 12:05发布

I have this method:

public RasImage Load(Stream stream);

if I want to load a url like:

string _url = "http://localhost/Application1/Images/Icons/hand.jpg";

How can I make this url in to a stream and pass it into my load method?

2条回答
一纸荒年 Trace。
2楼-- · 2019-03-28 12:35

Here's one way. I don't really know if it's the best way or not, but it works.

// requires System.Net namespace
WebRequest request = WebRequest.Create(_url);

using (var response = request.GetRespone())
using (var stream = response.GetResponseStream())
{
    RasImage image = Load(stream);
}

UPDATE: It looks like in Silverlight, the WebRequest class has no GetResponse method; you've no choice but to do this asynchronously.

Below is some sample code illustrating how you might go about this. (I warn you: I wrote this just now, without putting much thought into how sensible it is. How you choose to implement this functionality would likely be quite different. Anyway, this should at least give you a general idea of what you need to do.)

WebRequest request = WebRequest.Create(_url);

IAsyncResult getResponseResult = request.BeginGetResponse(
    result =>
    {
        using (var response = request.EndGetResponse(result))
        using (var stream = response.GetResponseStream())
        {
            RasImage image = Load(stream);
            // Do something with image.
        }
    },
    null
);

Console.WriteLine("Waiting for response from '{0}'...", _url);
getResponseResult.AsyncWaitHandle.WaitOne();

Console.WriteLine("The stream has been loaded. Press Enter to quit.");
Console.ReadLine();
查看更多
闹够了就滚
3楼-- · 2019-03-28 12:38

Dan's answer is a good one, though you're requesting from localhost. Is this a file you can access from the filesystem? If so, I think you should be able to just pass in a FileStream:

FileStream stream = new FileStream(@"\path\to\file", FileMode.Open);
查看更多
登录 后发表回答