使用网络客户端保存网络驱动器照片

本文关键字:网络 驱动器 照片 保存 客户端 | 更新日期: 2023-09-27 18:35:39

嘿,我有以下 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)上有一个错误,说:

错误 7 无法将类型"byte[]"隐式转换为"int"

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

使用网络客户端保存网络驱动器照片

有几个问题:

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

试试这个:

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返回一个流,您可以直接传递以构造图像(无需将所有数据拉取到字节数组)

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

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

请注意,要将图像转换为 base 64 需要您的byte[],您不妨从tClient.DownloadData(mImage)中获取

mImage = Convert.ToBase64String(tClient.DownloadData(mImage));