Как загрузить файл CSV в строку с URL-адреса https?

Код, который я здесь перечислил, работает, когда я ReadAllText из локального файла. Что мне нужно сделать, так это заменить путь "C:\LocalFiles\myFile.csv" на " https://mysite.blah/myFile.csv".

Я пробовал несколько методов, но, похоже, не могу загрузить файл csv в строковую переменную. Если бы я мог просто сделать это, тогда код работал бы для меня.

var csv = System.IO.File.ReadAllText(@"C:\LocalFiles\myFile.csv");

StringBuilder sb = new StringBuilder();
using (var p = ChoCSVReader.LoadText(csv).WithFirstLineHeader())
{
    p.Configuration.NullValue = null;

    if (p.Configuration.CSVRecordFieldConfigurations.IsNullOrEmpty())
    {
        p.Configuration.NullValue = null;
    }

    // ChoIgnoreFieldValueMode.DBNull = ChoIgnoreFieldValueMode.Empty();
    using (var w = new ChoJSONWriter(sb))
        w.Write(p);
}
string fullJson = sb.ToString();

Если я просто заменю путь, я получаю сообщение об ошибке, в котором говорится, что путь недействителен.

2 ответа

Решение

Вам нужно получить строку с помощью веб-запроса:

string urlAddress = "https://mySite.blah/myFile.csv";

    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(urlAddress);
    HttpWebResponse response = (HttpWebResponse)request.GetResponse();

    if (response.StatusCode == HttpStatusCode.OK)
    {
        Stream receiveStream = response.GetResponseStream();
        StreamReader readStream = null;
        if (response.CharacterSet == null)
        {
            readStream = new StreamReader(receiveStream);
        }
        else
        {
            readStream = new StreamReader(receiveStream,
            Encoding.GetEncoding(response.CharacterSet));
        }

        string data = readStream.ReadToEnd();
        response.Close();
        readStream.Close();
     }

или с помощью веб-клиента:

WebClient wc = new WebClient();
string data = wc.DownloadString("https://mySite.blah/myFile.csv");

Тогда пройдите data в ваш читатель вместо использования System.IO.File.ReadAllText(@"C:\LocalFiles\myFile.csv");

Оба приведенных выше примера предполагают, что файл общедоступен по этому URL-адресу без аутентификации или определенных значений заголовка.

Заменить эту строку

var csv = System.IO.File.ReadAllText(@"C:\LocalFiles\myFile.csv");

с

string result = client.GetStringAsync("https://mySite.blah/myFile.csv").Result;

или

var textFromFile = (new WebClient()).DownloadString("https://mySite.blah/myFile.csv");

Есть много других способов сделать это. Просто погуглите.

Другие вопросы по тегам