2015-02-15 2 views
0

У меня есть веб-приложение, и я хочу загрузить файл excel и прочитать его в приложении. Все хорошо, когда я запускаю приложение с VS или в localhost (с окнами 7 и IIS 7.5). Но когда я развертываю приложение на сервере с серверами Windows 2008 и IIS 7.5, я вижу две ошибки. Я подключился к серверу с помощью средства просмотра команд, и я развернул приложение на сервере.Формат данного пути не поддерживается на сервере Windows

Когда я хочу, чтобы загрузить файл с рабочего стола сервера я вижу это (я имею доступ администратора):

Access to the path 'C:\Users\Administrator\Desktop\931001.xlsx' is denied. 

И когда я хочу, чтобы загрузить с другого pathese я вижу эту ошибку:

The given path's format is not supported. 

это мои попытки загрузить этот файл:

Попробуйте 1:

public ActionResult Index(HttpPostedFileBase file) 
{ 
    file.SaveAs(Server.MapPath("~/Files/" + file.FileName)); 
    var fileName = "/Files/" + file.FileName; 
    var connectionString = ""; 
    if (file.FileName.Split('.').LastOrDefault().ToLower() == "xlsx") 
    { 
     connectionString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0}; Extended Properties=Excel 12.0;", Server.MapPath(fileName)); 
    } 
    else 
    { 
     connectionString = string.Format("Provider=Microsoft.Jet.OLEDB.4.0; data source={0}; Extended Properties=Excel 8.0;", fileName); 
    } 
    var adapter = new OleDbDataAdapter("SELECT * FROM [Sheet1$]",  connectionString); 
    var ds = new DataSet(); 
    adapter.Fill(ds, "contracts"); 
    var contracts = ds.Tables["contracts"].AsEnumerable(); 
} 

Попробуйте 2:

public ActionResult Index(HttpPostedFileBase file) 
{ 
    var path = Server.MapPath("~/Files/"); 
    file.SaveAs(Path.Combine(path, file.FileName)); 
    var fileName = "~/Files/" + file.FileName; 
    var connectionString = ""; 
    if (file.FileName.Split('.').LastOrDefault().ToLower() == "xlsx") 
    { 
     connectionString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0}; Extended Properties=Excel 12.0;", Server.MapPath(fileName)); 
    } 
    else 
    { 
     connectionString = string.Format("Provider=Microsoft.Jet.OLEDB.4.0; data source={0}; Extended Properties=Excel 8.0;", Server.MapPath(fileName)); 
    } 
    var adapter = new OleDbDataAdapter("SELECT * FROM [Sheet1$]", connectionString); 
    var ds = new DataSet(); 
    adapter.Fill(ds, "customer"); 
    var customer = ds.Tables["customer"].AsEnumerable(); 
} 

Попробуйте 3:

public ActionResult Index(HttpPostedFileBase file) 
{ 
    var path = Server.MapPath(@"\Files\"); 
    file.SaveAs(Path.Combine(path, file.FileName)); 
    var fileName = @"\Files\" + file.FileName; 
    var connectionString = ""; 
    if (file.FileName.Split('.').LastOrDefault().ToLower() == "xlsx") 
    { 
     connectionString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0}; Extended Properties=Excel 12.0;", Server.MapPath(fileName)); 
    } 
    else 
    { 
     connectionString = string.Format("Provider=Microsoft.Jet.OLEDB.4.0; data source={0}; Extended Properties=Excel 8.0;", Server.MapPath(fileName)); 
    } 
    var adapter = new OleDbDataAdapter("SELECT * FROM [Sheet1$]", connectionString); 
    var ds = new DataSet(); 
    adapter.Fill(ds, "customer"); 
    var customer = ds.Tables["customer"].AsEnumerable(); 
} 

Что может быть проблема?

ответ

0

Попробуйте использовать его следующим образом:

public ActionResult Index(HttpPostedFileBase file) 
 
{ 
 
    var path = Path.Combine(Server.MapPath("~/Files/",file.FileName)); 
 
    file.SaveAs(path); 
 
    var connectionString = ""; 
 
    if (Path.GetExtension(path).ToLower()==".xslx") 
 
    { 
 
     connectionString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0}; Extended Properties=Excel 12.0;",path); 
 
    } 
 
    else 
 
    { 
 
     connectionString = string.Format("Provider=Microsoft.Jet.OLEDB.4.0; data source={0}; Extended Properties=Excel 8.0;", path); 
 
    } 
 
    var adapter = new OleDbDataAdapter("SELECT * FROM [Sheet1$]", connectionString); 
 
    var ds = new DataSet(); 
 
    adapter.Fill(ds, "customer"); 
 
    var customer = ds.Tables["customer"].AsEnumerable(); 
 
}

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