Я получаю файл через SFTP-сеанс в службе WCF. Этот файл считывается в объект MemoryStream
. Я успешно передал этот поток в файл на диске & подтвердил, что файл успешно передан (это было сделано с использованием FileStream
вместо MemoryStream
).Дополнительные байты, добавляемые к файлу при сохранении в SQL Server
Но когда я конвертировать этот MemoryStream
в byte[]
, чтобы сохранить его в таблицу SQL Server (с колонкой, объявленного VARBINARY(MAX)
), кажется, что 8 байт быть префиксом в файл.
В качестве примера я загрузил .txt-файл, используя службу SFTP SFTP &, сохраненную в базе данных. Затем, используя BCP, я вывожу файл на диск. После открытия файла в первой строке добавляется «U» («U» и 7 пробелов).
То же самое происходит с документами Office. Я сделал ту же процедуру, что и выше, для файла .xls, который на старте 49Kb большой. Но после вывода его с использованием BCP файл поврежден & - 50Kb большой.
Как ни странно, .pdf-файлы, кажется, правильно сохраняют &.
Несколько фрагментов кода я использую:
Для преобразования потока в массив байтов
var stream = (MemoryStream)data;
stream.Seek(0, SeekOrigin.Begin);
byte[] m_Bytes = stream.ToArray();
Чтобы сохранить массив в SQL Server
cmd.Parameters.Add("@File", System.Data.SqlDbType.VarBinary, -1).Value = file;
Чтобы экспортировать файл с SQL Server в файл с использованием BCP
bcp "SELECT [File] FROM SFTPUpload.dbo.Upload" queryout "C:\SFTP\Test.txt" -T -N -S Server_Name\Instance_Name
Может ли это быть проблема с методом, я использую, чтобы сохранить файл в базу данных, или как я извлечения файла с помощью BCP? Последнее кажется более вероятным, так как сохранение файла непосредственно на диске не испортило его.
Любая помощь или совет были бы очень признательны.
Вы имеете право на префикс длиной 8 байтов (перегруженный как индикатор NULL) для типов данных varbinary (MAX). –
Отлично, спасибо за быстрый ответ. Я занят составлением приложения-экспортера, чтобы вытащить файлы из БД. И я узнал кое-что о BCP сейчас в процессе ... –
Чтобы подтвердить полноту, после написания приложения-экспортера для экспорта байтов как есть, файлы больше не повреждались. –