在我们的情况下,我们使用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);
}
答案 0 :(得分:1)
对任何有兴趣的人; 我正在使用MemoryStream上的GetBuffer方法将文件数据转换为base64。事实证明,它还为您提供了所有已分配的内存空间,包括未使用的字节。使用 ToArray 方法仅返回数据本身。