存储为SQL映像并作为基本64字符串传输后的文件大小

时间:2014-12-04 11:37:24

标签: c# soap blob filesize microsoft-dynamics

在我们的情况下,我们使用Microsoft Dynamics NAV将文件存储在SQL数据库中。然后我们获取此blob / image数据,将其转换为base64字符串,通过SOAP服务传输它并再次将其另存为文件。生成的文件总是比原始文件大得多。文件大小似乎遵循2个不同的模式:120KB,248KB,504KB,1016KB,2040KB等。

实施例: 在遵循此路由后,存储23.669.715字节文件会生成33.546.240字节文件。

用于保存文件的C#代码:

string fileData = string.Empty;
WebshopMgt webService = Helpers.WebServices.GetWebshopService();

try
{
    webService.GetDocumentData(navDocument.IntegrationID, ref fileData);
}
catch (Exception ex)
{
    Log.Error(String.Format("Error retrieving document data for NAV Document '{0}'.",     navDocument.IntegrationID), ex);
    return Status.SetStatus(navDocument.IntegrationID, syncId, SyncStatus.Failed, ex.Message);
}

try
{
    byte[] buffer = Convert.FromBase64String(fileData);
    FileStream fileStream = File.Create(filePath);
    fileStream.Write(buffer, 0, buffer.Length);
    fileStream.Close();
}
catch (Exception ex)
{
    Log.Error(String.Format("Error saving document data for NAV Document '{0}'.", navDocument.IntegrationID), ex);
    return Status.SetStatus(navDocument.IntegrationID, syncId, SyncStatus.Failed, ex.Message);
}

1 个答案:

答案 0 :(得分:1)

对任何有兴趣的人; 我正在使用MemoryStream上的GetBuffer方法将文件数据转换为base64。事实证明,它还为您提供了所有已分配的内存空间,包括未使用的字节。使用 ToArray 方法仅返回数据本身。