使用 webClient 保存网络驱动器照片

Saving network drive photo using webClient

嘿,我有以下 VB.net 代码需要转换为 C#:

 Dim tClient As WebClient = New WebClient
 Dim imgLink As String = "\the\path\photos\" + userID + ".jpg"
 Dim tImage As Bitmap = Bitmap.FromStream(New MemoryStream(tClient.DownloadData(imgLink)))

 Dim mImage As String = ImageToBase64(tImage, System.Drawing.Imaging.ImageFormat.Jpeg)

这在 VB 中工作得很好,但是当我尝试将它转换为 C# 时:

WebClient tClient = new WebClient();
string mImage = @"\the\path\photos\" + userID + ".jpg";
Bitmap tImage = Bitmap.FromStream[new MemoryStream[tClient.DownloadData(mImage)]];

mImage = ImageToBase64(tImage, System.Drawing.Imaging.ImageFormat.Jpeg);

它在 tClient.DownloadData(imagePath) 上出错说:

Error 7 Cannot implicitly convert type 'byte[]' to 'int'

在 C# 中定义它的正确方法是什么?

有几个问题:

  • 您混淆了数组运算符括号 [ 与 Bitmap.FromStream 中的函数调用 ( 括号和 MemoryStream 构造函数
  • 您一次下载整个文件,只是为了将其加载到流中 - 这违背了流式传输的目的
  • Bitmap.FromStream 实际上来自它的超类 Image 和 returns 图像(您不能保证该文件将是实际的位图,而不是其他格式 - 如果您确定它,你必须将它转换为位图)

试试这个:

WebClient tClient = new WebClient();
string mImage = @"\the\path\photos\" + userID + ".jpg";
Bitmap tImage = (Bitmap)Bitmap.FromStream(tClient.OpenRead(mImage));

mImage = ImageToBase64(tImage, System.Drawing.Imaging.ImageFormat.Jpeg);

WebClient.OpenRead returns 可以直接传递以构建图像的流(无需将所有数据拉入字节数组)

不要使用方括号。但是使用括号并声明一个 new Bitmap

WebClient tClient = new WebClient();
string mImage = @"\the\path\photos\" + userID + ".jpg";
Bitmap tImage = new Bitmap(Bitmap.FromStream(new MemoryStream(tClient.DownloadData(mImage))));

请注意 convert the image to base 64 需要您的 byte[],您不妨从 tClient.DownloadData(mImage)

中获取
mImage = Convert.ToBase64String(tClient.DownloadData(mImage));