2016-08-16 7 views
0

サプライヤ向けのHTML5オンラインポータルを作成しました。そこでは、必要なだけ多くのファイルをアップロードしてダウンロードできます。残念ながら、あなたにスクリーンショットを表示することはできません。しかし、ここに問題があります: 2つ以上のファイルがアップロードされている場合、programmは内部にすべてのPDFを含む.zipファイルを作成する必要があります。それは正しく作成され、ファイルはすべてしかし、が壊れている、私はそれらを開くことができないことを意味します。それに加えて、彼らは1キロバイトのファイルサイズを持っています。.zipでダウンロードしたPDFが壊れています

String zipFile = String.Format(@"{0}.zip", Guid.NewGuid()); 
String zipPath = String.Format(@"{0}\{1}", Data.Properties.Settings.Default.DownloadPath, zipFile); 


using (FileStream zipToOpen = new FileStream(zipPath, FileMode.CreateNew)) 
{ 
    using (ZipArchive archive = new ZipArchive(zipToOpen, ZipArchiveMode.Create)) 
    { 
     using (SqlConnection con = new SqlConnection(Data.Properties.Settings.Default.SelectionTMPDatabase)) 
     { 
      con.Open(); 

      using (SqlCommand cmd = new SqlCommand(String.Format("SELECT [FileName], [File] FROM {0} WHERE [DownloadId] = @downloadId", Data.Properties.Settings.Default.SelectionFileDatabaseTable), con)) 
      { 
       cmd.Parameters.AddWithValue("@downloadId", downloadID); 

       using (SqlDataReader dr = cmd.ExecuteReader()) 
       { 
        while (dr.Read()) 
        { 
         if (dr["FileName"] != null && dr["FileName"] != DBNull.Value && fileNames.Contains(dr["FileName"].ToString())) 
         { 
          ZipArchiveEntry entry = archive.CreateEntry(dr["FileName"].ToString()); 

          using (StreamWriter writer = new StreamWriter(entry.Open())) 
          { 
           writer.Write((byte[])dr["File"]); 
          } 

これは、.zipが作成される部分です。あなたが私を助けることを願っています!ご質問がありましたらお気軽に!

+1

を行い、私は最初のネストを減らすためにリファクタリングういかが

。データをデータベースから取り出してファイルに書き出します –

+0

'dr [" File "]'のバイト配列にすべてのバイトが含まれていますか? –

答えて

0

空のZIPエントリを作成してから、 "File"列の内容で書き込んでいます。実際には何をしようとしていますか?あなたがdr["FileName"]のフルパスを取得取得し、単に

archive.CreateEntryFromFile(dr["fileName"], fullPathToFile); 
+0

これは私が意図しているものです。私は数ヶ月前にこの方法で作業し、すべてを適切に作成しました。 Btwには 'CreateEntryFromFile'メソッドはありません。 –

+0

https://msdn.microsoft.com/en-us/library/hh485720(v=vs.110).aspx、 'System.IO.Compression'をインポートする必要があります。私はあなたがデータベースかDataReaderエンコーディングがいくつかの文字を混乱させていると想像しているように、Fileデータから直接PDFファイルを作成できるかどうかを確認します。 –

関連する問題