ファイルバイトをチャンクアップして各チャンクをデータベースに保存するアプリがあります(各チャンクに関する情報をログに記録しています)。次に、データベースからチャンクを取得し、それらをC#に戻し、ファイルに書き込もうとしています。
現在、次のC#コードがあります。
string encoded = GetBase64EncodedFile(); // This is just for readability
byte[] fileBytes = Convert.FromBase64String(encoded).ToList().ToArray();
Database database = DatabaseFactory.CreateDatabase();
using (DbCommand command = database.GetStoredProcCommand("SaveFileChunk"))
{
database.AddInParameter(command, "fileName", DbType.String, fileName);
database.AddInParameter(command, "offset", DbType.Int32, offset);
database.AddInParameter(command, "number", DbType.Int32, number);
database.AddInParameter(command, "chunkBytes", DbType.Binary, fileBytes);
database.ExecuteNonQuery(command);
}
この時点で、fileBytes.Count()を出力すると、次のように表示されます。152754
レコードは、次の構造でSQLAzureテーブルに書き込まれます。
FileChunk
---------
Filename nvarchar(max)
Offset int
Number int
ChunkBytes varbinary(max)
後で、次のクエリでファイルチャンクを受信しようとします。
SELECT * FROM [FileChunk] ORDER BY [Number]
次に、FileChunkCLRオブジェクトに次のようにデータを入力しようとします。
public FileChunk(IDataReader reader)
{
fileName = reader["Filename"].ToString();
offset = Convert.ToInt32(reader["Offset"].ToString());
number = Convert.ToInt32(reader["Number"].ToString());
chunkBytes = reader["ChunkBytes"].ToString().ToCharArray().Select(c => (byte)c).ToArray();
}
このコードを実行すると、上記のchunkBytes.Count()が13であることがわかりました。
これは、ある種のシリアル化またはデータ型変換エラーがあることを意味します。しかし、私には見えません。方法a)バイトをSQL Azureに入れますb)バイトを元に戻します
ありがとうございました