2017-06-27 3 views
-1

私はWebサービス経由でSQLのvarbinary(max)フィールドに書き込むクライアントサービスを持っています。生のバイトからxlsxを書き込むと壊れた

次に、www経由でダウンロードするウェブページのレスポンスを使用してこれを書き込みます。 これは、xlsxファイル以外のすべてに対してうまくいきます。

私はレスポンスを使わずにテストしましたが、私は同じ問題があります。

Excelを開く

は、「我々はいくつかの内容に問題が検出されました..」と言う が続い

クライアントアプリは経由で読み込む「Excelはなど...修理および削除することで、ファイルを開くことができました」開こう:

Dim objFileStream As IO.FileStream = New IO.FileStream(fileItem, FileMode.Open, FileAccess.Read) 
Dim len As Integer = objFileStream.Length 
Dim myByteArray(len) As Byte 
objFileStream.Read(myByteArray, 0, len) 
objFileStream.Close() 

次に、Webサービス経由でmyByteArrayを保存します。

クライアントの書き込みエンティティフレームワークとDBから抽出して書き込みます。

System.IO.File.WriteAllBytes(filePath1, output) 

は、私は、ファイルを書き込むためにさまざまな方法を試してみたが、私は一貫して、この破損メッセージが表示されます。

アイデア?

編集:

私はWebサービス/デシベルの送信/ストレージなどを削除した場合、次のように私は問題を絞り込むことができます。

- メソッド読み: - 即時書き込み

Dim objFileStream As IO.FileStream = New IO.FileStream(fileItem, FileMode.Open, FileAccess.Read) 
Dim len As Integer = objFileStream.Length 
Dim myByteArray(len) As Byte 
objFileStream.Read(myByteArray, 0, len) 
objFileStream.Close() 

を:

System.IO.File.WriteAllBytes("c:\test.xlsx", myByteArray) 

test.xlsxにはまだ問題があります。

+0

送信しているヘッダーは、正確なExcelファイル形式と一致していますか? xls vs xlsx vs xlsbなど保存されたバージョンが壊れていないと確信していますか? –

+0

私はヘッダーや操作を使用していません。私は単にバイト配列を読み込み、varbinaryフィールドに保存して書き出します。標準xlsの場合、問題なく動作します...そしてpdfsとhtmlファイル。しかしxlsxは私に腐敗のメッセージを与えます –

+0

"私はwwwを介してダウンロードするウェブページ上の応答を介してこれを書きます。 - あなたはどんなコンテンツタイプのヘッダも送らないのですか?代わりに、サーバー上のファイルにコンテンツを書き込む場合、そのファイルはオープン可能ですか? –

答えて

0

xlsxをバイト配列に読み込むと、最後の配列ポイントに追加のヌル値が存在することがわかっています。

最後の項目がない状態で配列を再整理し、保存すると完全に機能します。 db save loadとそれに続くresponse.writesもうまくいきます。

ご挨拶ありがとうございます

関連する問題