2017-10-27 21 views
0

Excelテーブルを読み込むためにLinqをExcelライブラリに使用しています。今までは、それがローカルに良い仕事をしていた、方法ExcelQueryFactoryはこの方法でエクセルのルートを取得します:私は休憩APIのオンラインそれを使用したいと思い、今URL絶対パスはLinqで動作しませんサーバー上のExcelに。 c#

var book = new ExcelQueryFactory(@"C:\data.xls"); 

、POSTは、Excelのアップロードに使用しましただから、

[HttpPost] 
    [Route("Upload")] 
    public Task<HttpResponseMessage> UploadFile() { 

     List<string> savedFilePath = new List<string>(); 
     if (!Request.Content.IsMimeMultipartContent()) 
     { 
      throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType); 
     } 
     string rootPath = HttpContext.Current.Server.MapPath("~/UploadedFiles"); 
     var provider = new MultipartFileStreamProvider(rootPath); 
     var task = Request.Content.ReadAsMultipartAsync(provider). 
      ContinueWith<HttpResponseMessage>(t => 
      { 
       if (t.IsCanceled || t.IsFaulted) 
       { 
        Request.CreateErrorResponse(HttpStatusCode.InternalServerError, t.Exception); 
       } 
       foreach (MultipartFileData item in provider.FileData) 
       { 
        try 
        { 
         string name = item.Headers.ContentDisposition.FileName.Replace("\"", ""); 
         string newFileName = Guid.NewGuid() + Path.GetExtension(name); 
         Debug.WriteLine(item.LocalFileName); 
         File.Move(item.LocalFileName, Path.Combine(rootPath, newFileName)); 

         Uri baseuri = new Uri(Request.RequestUri.AbsoluteUri.Replace(Request.RequestUri.PathAndQuery, string.Empty)); 
         //RELATIVE PATH 
         string fileRelativePath = "~/UploadedFiles/" + newFileName; 
         //LeerExcel(fileRelativePath); 
         //ABSOLUTE PATH 
         Uri fileFullPath = new Uri(baseuri, VirtualPathUtility.ToAbsolute(fileRelativePath)); 
         savedFilePath.Add(fileFullPath.ToString()); 
         //LeerExcel(savedFilePath[0]); 

        } 
        catch (Exception ex) 
        { 
         string message = ex.Message; 
        } 
       } 

       // string rutaFin = "~" + savedFilePath[0]; 
       // string rest = rutaFin.Replace("http://localhost:56618", ""); 
       // LeerExcel(rest); 
       return Request.CreateResponse(HttpStatusCode.Created, savedFilePath); 

      }); 
     return task; 
    } 

、ExcelQueryFactory弦ルートのサーバーの作業上、手動で絶対パスまたは相対パスどちらもExcelを選択して:ウェブAPIに次のようです。 ABSOLUTE:

ルートは以下の通りです。この方法で取得 http://localhost:56618/UploadedFiles/9a27e785-e486-4807-8a80-7abb9b940d8b.xls

と相対:

/UploadedFiles/9a27e785-e486-4807-8a80-7abb9b940d8b.xls 

は、私が好きな方法で使用することはできますか?サーバーがオンラインの間、取得された絶対パスはアクセス可能です。そのURLにアクセスすると、ファイルがダウンロードされます。

答えて

0

問題が解決されています。私が言ったように

は、私はこのライブラリはローカルで働いていたと思ったが、そうではありませんでした。

Microsoftは新しい大きなアップデートを開始しましたので、データベースエンジンを使用した場合、多くの人々はいくつかの問題に気づいている、“Unexpected error from external database driver (1). (Microsoft JET Database Engine)” after applying October security updates.

まず、私はFake.txtは/ UploadedFilesを上のファイル作成し、プロジェクトのリポジトリにあるフォルダ以下のように、私は、それを常にコピーする許可を与える:このファイルを使用して

Fake.txt properties

、 - 私はUploadedFilesフォルダが、私は、サーバーを実行するたびにコピーされることを実現します。

次のステップ:。その後、原因マイクロソフト大きなアップデートに

、recomendationは「ダウンロードすることですとMicrosoft Access Database Engine 2010 Redistributableをインストールし、プロバイダとしてACEを使用するには、Microsoft ExcelでDB接続文字列を変更する例:変更プロバイダプロバイダー= Microsoft.ACE.OLEDB.12.0へ= Microsoft.Jet.OLEDB.4.0。

私は、私はいけない、ダウンロードしてそのファイルをインストールしますが、この日の間に、3つの新しいWindowsの更新プログラムがインストールされていた、そうしていますこの3つの更新がこの問題の解決に関連しているかどうかを確認してください。 アップデートは以下のとおりです。

Update 3

Update 2

Update 1

2010データベースエンジンのバージョンのファイルをインストールした後、私はの.xlsxする.XLSからExcelの延長となりましたすべての作業を変更しました。