使用网络客户端保存网络驱动器照片
本文关键字:网络 驱动器 照片 保存 客户端 | 更新日期: 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));