我正尝试从数据库导出员工图像,将其保存到我的计算机上,然后将其上传到每个员工的帐户中的Salesforce。我的问题是我从数据库中保存文件的方式一定存在问题。当我向Salesforce上传从数据库中提取的图片文件时,它告诉我"此时您的文件无法上传。请在几分钟后再试一次#34;但是,当我通过电子邮件将个人图片发送给自己,下载它,然后上传该图片时,它就可以了。 (我试图集体这样做;它不起作用)。我得出的结论是问题可能与代码有关。该照片存储为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
)保存了该文件,但这些扩展程序均无效。
答案 0 :(得分:1)
在最后一次写作时,你不应该从retval
中减去1。
retval
包含读取的字节数。
BinaryWriter.Write
的第三个参数是要写入的字节数。
由于你想要写所有字节,你应该只传递retval
而不是retval - 1
,这样可以保留最后一个字节不被写入。