Помилка "Формати URI не підтримуються" - Як витягти зображення з Інтернету

Нещодавно я написав такий код:

protected void OpenImg_Click(object sender, EventArgs e)
            {
                int i = 0;

                string PathToFolder = "C://LiveSite/img/XL/";

                var dirInfo = new DirectoryInfo(PathToFolder);
                string FileName = Variables.param + "XL.jpg";
                var foundFiles = dirInfo.GetFiles(FileName);

                if (foundFiles.Length == 1)
                {
                    ClientScript.RegisterStartupScript(this.GetType(), "openFoundImage", "window.open('" + PathToFolder + foundFiles[i].Name + "');", true);
                }
            }
        }
   }

Це правильно, але це не спрацювало, тому що він знімав диск c: //, тому я змінив розташування зображення на: http://www.companysite.com/img/XL/ замість цього. Коли я замінюю рядок PathToFolder = "C://LiveSite/img/XL /"; з http://www.companysite.com/img/XL/ помилка "Формати URI не підтримуються"

Тоді я змінив код на:

 protected void OpenImg_Click(object sender, EventArgs e)
                {
                    int i = 0;

                    string uriPath = "http://www.companysite.com/img/XL/";

                    string  localPath = new Uri(uriPath).LocalPath;
                    string FileName = Variables.param + "XL.jpg";
                    var foundFiles = localPath.GetFiles(FileName); //ERROR

                    if (foundFiles.Length == 1)
                    {
                        ClientScript.RegisterStartupScript(this.GetType(), "openFoundImage", "window.open('" + uriPath + foundFiles[i].Name + "');", true);
                    }
                }
            }
        }

Тепер я отримую помилку від використання .GetFiles - Що я вважаю, щоб використовувати замість GetFiles? і чи правильний мій код, щоб витягти зображення з Інтернету? Будь-яка допомога буде оцінена.

1

8 Відповіді

Вам потрібно скористатися класом веб-клієнта http://msdn.microsoft. com/en-us/library/system.net.webclient.aspx .

Це допоможе вам:

using System;
using System.Net;
using Myapp.Properties;

namespace MyApp
{
    public class Test
    {
        static void Main(string[] args)
        {
        string website ="http://www.fryan0911.com/webclientsample.zip";
        string downloadfolder = Settings.Default.DownloadFolder;

        try
            {
            WebClient wc = new WebClient();
            wc.DownloadFile(website, downloadfolder);
            Console.WriteLine("Web file has been downloaded to " + downloadfolder);
            }
        catch (WebException e)
        {
            Console.WriteLine(e.Message);
        }
        Console.ReadKey();
    }
}
}

код запозичений з:

http://www.fryan0911.com /2009/03/c-download-file-from-website-using-web.html

2
додано

Вам потрібно скористатися класом веб-клієнта http://msdn.microsoft. com/en-us/library/system.net.webclient.aspx .

Це допоможе вам:

using System;
using System.Net;
using Myapp.Properties;

namespace MyApp
{
    public class Test
    {
        static void Main(string[] args)
        {
        string website ="http://www.fryan0911.com/webclientsample.zip";
        string downloadfolder = Settings.Default.DownloadFolder;

        try
            {
            WebClient wc = new WebClient();
            wc.DownloadFile(website, downloadfolder);
            Console.WriteLine("Web file has been downloaded to " + downloadfolder);
            }
        catch (WebException e)
        {
            Console.WriteLine(e.Message);
        }
        Console.ReadKey();
    }
}
}

код запозичений з:

http://www.fryan0911.com /2009/03/c-download-file-from-website-using-web.html

2
додано

Схоже, ви використовуєте файли на вашому власному сервері, тоді ви можете захопити їх так, як це з коду/контролера.

        var serverRootPath = Server.MapPath("~");
        var files = Path.Combine(serverRootPath,"img");
        var images = Directory.GetFiles(files);
0
додано

Схоже, ви використовуєте файли на вашому власному сервері, тоді ви можете захопити їх так, як це з коду/контролера.

        var serverRootPath = Server.MapPath("~");
        var files = Path.Combine(serverRootPath,"img");
        var images = Directory.GetFiles(files);
0
додано

Схоже, ви використовуєте файли на вашому власному сервері, тоді ви можете захопити їх так, як це з коду/контролера.

        var serverRootPath = Server.MapPath("~");
        var files = Path.Combine(serverRootPath,"img");
        var images = Directory.GetFiles(files);
0
додано

У мене була така ж проблема.

string app_path = System.Reflection.Assembly.GetExecutingAssembly().CodeBase;
string folderpath = Path.GetDirectoryName(app_path);// Error Here

Я помітив, що він надає мені шлях до файлу збірки, але з "file: ///" на початку рядка.

Тому я зробив це:

string app_path = System.Reflection.Assembly.GetExecutingAssembly().CodeBase.Replace(@"file:///", "");

Сподіваюся, що це допомагає.

0
додано

У мене була така ж проблема.

string app_path = System.Reflection.Assembly.GetExecutingAssembly().CodeBase;
string folderpath = Path.GetDirectoryName(app_path);// Error Here

Я помітив, що він надає мені шлях до файлу збірки, але з "file: ///" на початку рядка.

Тому я зробив це:

string app_path = System.Reflection.Assembly.GetExecutingAssembly().CodeBase.Replace(@"file:///", "");

Сподіваюся, що це допомагає.

0
додано

У мене була така ж проблема.

string app_path = System.Reflection.Assembly.GetExecutingAssembly().CodeBase;
string folderpath = Path.GetDirectoryName(app_path);// Error Here

Я помітив, що він надає мені шлях до файлу збірки, але з "file: ///" на початку рядка.

Тому я зробив це:

string app_path = System.Reflection.Assembly.GetExecutingAssembly().CodeBase.Replace(@"file:///", "");

Сподіваюся, що це допомагає.

0
додано
var chat = new Chat();
var chat = new Chat();
642 учасників

Обсуждение вопросов по C# / .NET / .NET Core / .NET Standard / Azure Сообщества-организаторы: — @itkpi — @dncuug