2015-08-28 2 views
7

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

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.Mvc; 
using System.IO; 
using FTPProject.Models; 

namespace FTPProject.Controllers 
{ 
    public class HomeController : Controller 
    { 
     public ActionResult Index() 
     { 
      ViewBag.Title = "Home Page"; 
      var uploadedFiles = new List<UploadedFile>(); 

      var files = Directory.GetFiles(Server.MapPath("~/UploadedFiles")); 

      foreach (var file in files) 
      { 
       var fileInfo = new FileInfo(file); 

       var uploadedFile = new UploadedFile() { Name = Path.GetFileName(file) }; 
       uploadedFile.Size = fileInfo.Length; 

       uploadedFile.Path = ("~/UploadedFiles/") + Path.GetFileName(file); 
       uploadedFiles.Add(uploadedFile); 
      } 

      return View(uploadedFiles); 
     } 
    } 
} 

UPDATE

Я попытался следующие:

в моем Web.Config:

Добавлено это:

<appSettings> 
    <add key="myPath" value="D:\Folder\PDF" /> 
    </appSettings> 

и изменил это в контроллере :

var myPath = WebConfigurationManager.AppSettings["myPath"]; 

var files = Directory.GetFiles(Server.MapPath(myPath)); 

Когда я запускаю этот код, я получаю эту ошибку:

An exception of type 'System.Web.HttpException' occurred in System.Web.dll but was not handled in user code

Additional information: 'D:\Folder\PDF' is a physical path, but a virtual path was expected.

ПРИМЕЧАНИЕ: Мое приложение не на том же сервере, что и D: \, но мне нужно, чтобы получить список файлов из D : \

+0

Сервер, на котором? В вашей сети? Где-то в интернете? Что это за имя/ip/server OS? Нужна дополнительная информация. –

+0

Возможный дубликат [Использование Directory.GetFiles на моем .net-сайте] (http://stackoverflow.com/questions/15979037/using-directory-getfiles-in-my-net-website) – MethodMan

+0

Вы отправили некоторый код, что не работает, когда вы развертываете его на сервере? – mason

ответ

14

Server.MapPath принимает виртуальный путь, например: ~/Folder/file.ext. Таким образом, вы не можете пройти по физическому пути, например D:\Folder\PDF.

Синтаксис для доступа к удаленной файловой системе отличается, вам нужен путь к файлу UNC. В вашем файле конфигурации myPath должен быть как \\servername\d$\Folder\PDF, и вам не понадобятся вызовы Server.MapPath и пользователь, который работает на вашем сайте, должен быть администратором на сервере, к которому вы обращаетесь.

Или вы можете предоставить общий доступ к папке и предоставить разрешения для учетной записи, которую выполняет ваш веб-сервер, тогда вам не нужны права администратора (это более безопасно). Затем путь UNC равен \\servername\sharename.

+0

Я изменил атрибут 'myPath' в web.config на' 'и получил эту ошибку' Дополнительная информация: не удалось найти часть пути 'c: \ users \ me \ documents \ visual studio 2013 \ Projects \ FTPProject \ FTPProject \ servname \ d $ \ Folder \ PTD'.' – user979331

+0

@ user979331 Вы не забыли удалить 'Server.MapPath'? – mason

+0

Спасибо, это прекрасно работает – user979331

1

Вот ссылка: Server.MapPath("."), Server.MapPath("~"), Server.MapPath(@"\"), Server.MapPath("/"). What is the difference?

Server.MapPath определяет относительный или виртуальный путь к карте физическому каталогу.

Server.MapPath(".")1 returns the current physical directory of the file (e.g. aspx) being executed 
Server.MapPath("..") returns the parent directory 
Server.MapPath("~") returns the physical path to the root of the application 
Server.MapPath("/") returns the physical path to the root of the domain name (is not necessarily the same as the root of the application) 

Пример:

Допустим, вы указали веб-сайт приложения (http://www.example.com/) для

C: \ Inetpub \ Wwwroot

и установили магазин приложение (под Интернет в качестве виртуального каталог в IIS, отмеченный как приложение) в

D: \ WebApps \ shop

Например, если вы вызываете Сервер.MapPath в следующем запросе:

http://www.example.com/shop/products/GetProduct.aspx?id=2342

тогда:

Server.MapPath(".")1 returns D:\WebApps\shop\products 
Server.MapPath("..") returns D:\WebApps\shop 
Server.MapPath("~") returns D:\WebApps\shop 
Server.MapPath("/") returns C:\Inetpub\wwwroot 
Server.MapPath("/shop") returns D:\WebApps\shop 

Если путь начинается с либо вперед (/) или обратной косой черты(), метод MapPath возвращает путь, как если путь был полный, виртуальный путь.

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

Смежные вопросы