繁体   English   中英

C#如何从数据库正确保存二进制图像文件?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM