2017-08-28 14 views
-2

私はこれに関する多くの答えをチェックしましたが、何も私を助けないでしょう。私のシナリオでは、バイト配列としてイメージを追加する列を持つテーブルがあります。モデルのプロパティをイメージバイトを格納する配列として宣言しました。その後、マイグレーション設定クラスで私は自分のテーブルに画像を含むデータを入れています。File.readallbytesがイメージファイルを見つけられません

var gembymonth = new List<GemStoneByMonth>{ 
      new GemStoneByMonth 
      { 
       EnglishZodiac="Aries", 
       SanskritZodiac = "Mesa", 
       GemEng="Garnet",    

       GemImage = File.ReadAllBytes("E:/NavBar/Astrology/Astrology/Astrology/Content/Images/GarnetGem.png") 
} 

私がここで提供しているファイルパスは私のローカルシステム用であり、うまくいきます。他のタイプのパスを指定するとエラーが発生します。私のイメージがコンテンツフォルダにあるので〜/ content/"filename"を追加し、サーバにホストすると明らかなエラーが返されます。パス"。私は多くの方法を試しました

Server.MapPath しかし、server.pathには定義が含まれていないと答えています。私が解決するとsystem.sql名前空間を取得し、mappathシューズエラーが発生します。

私のモデルクラス

public class GemStoneByMonth 
    { 

     public int GemStoneByMonthId { get; set; } 
     public string EnglishZodiac { get; set; } 
     public string MalayalamZodiac { get; set; } 
     public string SanskritZodiac { get; set; } 
     public string GemEng { get; set; } 
     public string GemMal { get; set; } 
     public byte[] GemImage { get; set; } 
    } 
} 

移行の設定シード法

protected override void Seed(Astrology.AstroDatabase.ApplicationDbContext context) 
     { 

      var gembymonth = new List<GemStoneByMonth>{ 
      new GemStoneByMonth 
      { 
       EnglishZodiac="Aries",     
       SanskritZodiac = "Mesa", 
       GemEng="Garnet",         
       GemImage = File.ReadAllBytes("E:/NavBar/Astrology/Astrology/Astrology/Content/Images/GarnetGem.png") 
      // GemImage = File.ReadAllBytes("E:/NavBar/Astrology/Astrology/Astrology/Content/Images/GarnetGem.png") 
      }, 

      new GemStoneByMonth 
      { 
       EnglishZodiac = "Taurus",    
       SanskritZodiac = "Vrsabha", 
       GemEng = "Lapis Lazuli",     
       GemImage = File.ReadAllBytes("E:/NavBar/Astrology/Astrology/Astrology/Content/Images/LapisLazuli.png") 

      }, 

      new GemStoneByMonth 
      { 
       EnglishZodiac = "Gemini",    , 
       SanskritZodiac = "Mithuna", 
       GemEng = "Aquamarine",     
       GemImage = File.ReadAllBytes("E:/NavBar/Astrology/Astrology/Astrology/Content/Images/Aquamarine.png") 
      }, 

      new GemStoneByMonth 
      { 
       EnglishZodiac = "Cancer",     
       SanskritZodiac = "Karka", 
       GemEng = "Yellow Saphire",     
       GemImage = File.ReadAllBytes("E:/NavBar/Astrology/Astrology/Astrology/Content/Images/Yellow Saphire.png") 
      }, 

      new GemStoneByMonth 
      { 
       EnglishZodiac = "Leo",     
       SanskritZodiac = "Siṃha", 
       GemEng = "Red Coral",     
       GemImage = File.ReadAllBytes("E:/NavBar/Astrology/Astrology/Astrology/Content/Images/Redcoral.png") 

      }, 

}; 

      gembymonth.ForEach(p => context.GemStoneByMonths.AddOrUpdate(s => new { s.EnglishZodiac, s.SanskritZodiac, s.GemEng, s.GemImage }, p)); 

     } 
     } 

残りのどれも働かないので、私は、このファイルパスを使用しています。と私は明らかにその私のローカルファイルパスとしてサーバーで動作しないことを知っている。

私は数時間頭を傷つけています。誰かが自分のサイトをサーバーにホストしているときに、ファイルを適切にマップする方法を言うことができますか?誰かがこれで私を助けることができますか?

+1

だから、ファイルはサーバー上のその場所に存在していません。 – CodeCaster

+0

には、実際に使用しているコード(server.mappathとallを含む)と、呼び出しスタックの完全な例外が書き込まれます。おそらくあなたのローカルシステム上に存在するパスはサーバ上に存在しないでしょう。 server.mappathのアプローチは、特にドライブ文字とルートディレクトリが固定されていない相対パスを使用している場合に、この場合に適切な処理をするように聞こえます。ファイルシステムのパスは、スラッシュの代わりにバックスラッシュを使用する必要がありますが、現代のOSは両方を理解していますが、これは問題ではないと思います。 – dlatikay

+0

しかし、私はserver.mappathを使用すると、エラーをスローします。 – Abhijith

答えて

0

HttpRuntime.AppDomainAppPathまたはServer.MapPathのいずれかを使用する必要があります。例えば

string path = HttpRuntime.AppDomainAppPath + "\\Content\\Images\\"; 
// Or string path = Server.MapPath("~/Content/Images/"); 
var gembymonth = new List<GemStoneByMonth> 
{ 
    new GemStoneByMonth 
    { 
     EnglishZodiac = "Cancer", 
     SanskritZodiac = "Karka", 
     GemEng = "Yellow Saphire", 
     GemImage = path + "Yellow Saphire.png" 
    } 
}; 
+0

私はこれをチェックさせてください – Abhijith

関連する問題