[英]C# How to correctly save a binary image file from database?
我试图从数据库中导出员工图像,将其保存到我的计算机上,然后将其上传到每个员工帐户中的Salesforce。 我的问题是从数据库保存文件的方式一定存在问题。 当我将从数据库中提取的图片文件上传到Salesforce时,它告诉我“您的文件目前无法上传。请在几分钟后重试”。 但是,当我通过电子邮件将自己的照片发送给自己时,下载它,然后上传该照片,它就可以工作。 (我试图做这个;没有用)。 我得出的结论是,问题可能出在代码上。 照片存储为varbinary(max)
并另存为.png
和.jpeg
类型,并使用MSDN代码的变体从数据库中提取出来:
SqlConnection connection = new SqlConnection(connectionString);
SqlCommand command = new SqlCommand(queryString, connection);
connection.Open();
SqlDataReader myReader = command.ExecuteReader(CommandBehavior.SequentialAccess);
while (myReader.Read())
{
filePath = @"C:\Users\npredey\Documents\Photos_from_database\" + myReader["first_name"] + '_' + myReader["last_name"];
FileStream fs = new FileStream(filePath + ".gif", FileMode.OpenOrCreate, FileAccess.Write); // creates a new file for output
bw = new BinaryWriter(fs);
startIndex = 0;
retval = myReader.GetBytes(3, startIndex, outbyte, 0, bufferSize);
while (retval == bufferSize)
{
bw.Write(outbyte);
bw.Flush();
startIndex += bufferSize;
retval = myReader.GetBytes(3, startIndex, outbyte, 0, bufferSize);
}
bw.Write(outbyte, 0, (int)retval - 1);
bw.Flush();
bw.Close();
fs.Close();
}
myReader.Close();
connection.Close();
文件的保存方式和无法上传的地方是否可能存在问题? 我用三个可接受的扩展名( .gif
, .jpg
, .png
)保存了文件,但没有一个起作用。
在最后一次写时,您不应从retval
减去1。
retval
包含读取的字节数。 BinaryWriter.Write
的第三个参数是要写入的字节数。
当您要写入所有字节时,应仅传递retval
而不是retval - 1
,这将使最后一个字节不会被良性写入。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.