如何从ASP Image Control直接将图片保存至数据库?
解决远程条形码图片保存到数据库的问题
你的问题核心是**ReadFile函数仅支持读取本地文件路径,但你传入的是远程HTTP URL**,因此触发非法路径错误。以下是修正后的完整解决方案:
1. 清理条形码URL
原URL末尾带有多余的HTML标签残留'/>',先清理:
Dim src As String = "https://barcode.tec-it.com/barcode.ashx?data=" + txtNewPPO.Text + "&code=Code128&translate-esc=on" Image1.ImageUrl = src
2. 替换图片读取方法
新增从远程URL下载图片并转为字节数组的函数,替代原ReadFile:
Imports System.Net Public Function GetImageBytesFromUrl(ByVal imageUrl As String) As Byte() Using webClient As New WebClient() Return webClient.DownloadData(imageUrl) End Using End Function
若使用.NET Framework 4.5+,更推荐用HttpClient:
Imports System.Net.Http Public Async Function GetImageBytesFromUrlAsync(ByVal imageUrl As String) As Task(Of Byte()) Using httpClient As New HttpClient() Return Await httpClient.GetByteArrayAsync(imageUrl) End Using End Function
3. 修改数据库保存代码
调用新函数获取字节数组,同时修正变量大小写不一致问题:
Dim imgUrl As String = Image1.ImageUrl Dim pic As Byte() = GetImageBytesFromUrl(imgUrl) '若用Async版本,需用Await调用 Dim qry1 As String = "Insert Into Employees (EmpID, EmpBarCode)values (@id,@img)" Using myCommand As New SqlCommand(qry1, CN) myCommand.Parameters.Add(New SqlParameter("@id", SqlDbType.VarChar)).Value = Me.txtNewPPO.Text myCommand.Parameters.Add(New SqlParameter("@img", SqlDbType.Image)).Value = pic CN.Open() myCommand.ExecuteNonQuery() CN.Close() End Using
额外注意事项
- 确保服务器可访问远程条形码接口(检查防火墙、代理设置)
- 对
txtNewPPO.Text做URL编码,避免特殊字符请求失败:Dim encodedData As String = System.Web.HttpUtility.UrlEncode(txtNewPPO.Text) Dim src As String = $"https://barcode.tec-it.com/barcode.ashx?data={encodedData}&code=Code128&translate-esc=on" - 用
Using语句自动释放资源,避免内存泄漏
内容的提问来源于stack exchange,提问作者ZahidKakar
相关产品推荐
相关产品推荐

