求解一个思路

lighwind 2012-07-07 08:17:33
商城网站中的图片是使用助理工具批量上传的,
现在遇到一个问题,商品描述中的图片都是外部链接 例如
src="http://tbphoto3.bababian.com/upload6/%E9%99%88%E7%BE%8E%E5%AE%89/201203/00190158590_m.jpg"
现在有没有一个办法将数据库里 产品描述中对应的图片全部下载下来,并且保存到服务器中的某个文件夹下
然后再修改数据库中的商品描述
...全文
171 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
huayy 2012-07-08
  • 打赏
  • 举报
回复
PHP的没做过,VB.NET的正好做过,帖源码给你。


Protected Sub Button4_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button4.Click

'建立文件夹
Dim s_rpath As String = System.Configuration.ConfigurationSettings.AppSettings("fileUrl")
Dim Datedir As String = DateTime.Now.ToString("yyyyMMdd") & "/x_more"
Dim updir As String = s_rpath & "\" & Datedir
If Not Directory.Exists(updir) Then
Directory.CreateDirectory(updir)
End If

'获取字符串
Dim sHtmlText As String = a_img_more.Value
Dim regImg As New Regex("<img\b[^<>]*?\bsrc[\s\t\r\n]*=[\s\t\r\n]*[""']?[\s\t\r\n]*(?<imgUrl>[^\s\t\r\n""'<>]*)[^<>]*?/?[\s\t\r\n]*>", RegexOptions.IgnoreCase)
Dim matches As MatchCollection = regImg.Matches(sHtmlText)


Dim fileName As String
Dim pid As Integer = Request("id")

Dim jsq As Integer = 0 '定义计数器

For Each match As Match In matches
Dim imgurl As String = match.Groups("imgUrl").Value
If (imgurl.IndexOf("img.xxx.com") < 0) Then '获取不为本站链接的图片

'检测图片尺寸(暂定高或宽大于300px的便下载)
Dim image As System.Drawing.Image = LoadImage(imgurl)
If image.Width >= 300 Or image.Height >= 300 Then

fileName = pid & "_" & GenerateRandom(8) & ".jpg"
Dim wc As Net.WebClient = New System.Net.WebClient()
wc.DownloadFile(imgurl, updir & "/" & fileName)
sHtmlText = sHtmlText.Replace(imgurl, "http://img.xxx.com/" & Datedir & "/" & fileName)
jsq = jsq + 1

End If

End If

Next

a_img_more.Value = sHtmlText
ClientScript.RegisterStartupScript(Page.[GetType](), "", "<script>alert('共计下载" & jsq & "张图片,更改尚未保存到数据库中,如无误请点击[直接保存内容]!');</script>")




End Sub

'下面两个类的作用是获取网络图片的属性,目前使用的是高和宽
Public Function LoadImage(ByVal imageURI As String) As Image
Dim image__1 As Image
If imageURI.StartsWith("http://") Then
image__1 = LoadImageFromWeb(imageURI)
Else
image__1 = Image.FromFile(imageURI)
End If
Return image__1
End Function

Public Function LoadImageFromWeb(ByVal sURL As String) As Bitmap
Dim i As Integer = sURL.LastIndexOf("/") + 1
Dim str As String = sURL.Substring(i, sURL.Length - i)
Dim webRequest__1 As Net.WebRequest = Net.WebRequest.Create(sURL)
webRequest__1.Credentials = Net.CredentialCache.DefaultCredentials
Dim stream As Stream = webRequest__1.GetResponse().GetResponseStream()
Dim memoryStream As New MemoryStream()
Dim bs As Byte() = New Byte(255) {}
Dim j As Integer = stream.Read(bs, 0, CInt(bs.Length))
While j > 0
memoryStream.Write(bs, 0, j)
j = stream.Read(bs, 0, CInt(bs.Length))
End While
stream.Close()
memoryStream.Position = CLng(0)
Return New Bitmap(memoryStream)
End Function




'产生文件名
Private Shared constant As Char() = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"}

Public Shared Function GenerateRandom(ByVal Length As Integer) As String
Dim newRandom As System.Text.StringBuilder = New System.Text.StringBuilder(62)
Dim rd As Random = New Random
Dim i As Integer = 0
While i < Length
newRandom.Append(constant(rd.Next(36)))
System.Math.Min(System.Threading.Interlocked.Increment(i), i - 1)
End While
Return newRandom.ToString
End Function
gsralex 2012-07-08
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 的回复:]

引用 9 楼 的回复:
你遍历下数据库所有的数据,如果格式混在一起的话 ,就用正则给图片提出来,然后用webrequest访问,下载下来,格式化图片,保存到文件,然后将路径和之前在数据库找到的路径做替换

php中没有这个对象吧
查的资料好像是curl 现在不论哪种语言都行
遇到一个问题
怎样获取图片连接
说下我的思路
第一步:遍历产品表 ,读取产品描述,获得里面的url属性 ……
[/Quote]


1、php没有也一定要一样功能的
2、用正则或者产品描述中的所有图片
3、替换的时候仍旧用正则

1、获取一个列表出来
2、读取其中的产品描述,然后用正则匹配所有的图片
3、循环这个产品描述的匹配的图片
4、用php 对应的webrequest下载
5、保存到本地文件夹,记住路径
6、用本地路径替换原来路径
7、update 产品描述到数据库
8、继续下一个产品
lighwind 2012-07-08
  • 打赏
  • 举报
回复
不会要一个个的把图片地址粘贴出来吧?
happytonice 2012-07-08
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 的回复:]

引用 10 楼 的回复:
将库中的链接导入到记事本中,考到迅雷去,让迅雷童鞋帮你,阿迅很勤快的呀

怎样提取数据库中图片路径?
[/Quote]

从数据库中进行导出数据操作,将数据导出到文本文件去
lighwind 2012-07-08
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 的回复:]
将库中的链接导入到记事本中,考到迅雷去,让迅雷童鞋帮你,阿迅很勤快的呀
[/Quote]
怎样提取数据库中图片路径?
lighwind 2012-07-08
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]
你遍历下数据库所有的数据,如果格式混在一起的话 ,就用正则给图片提出来,然后用webrequest访问,下载下来,格式化图片,保存到文件,然后将路径和之前在数据库找到的路径做替换
[/Quote]
php中没有这个对象吧
查的资料好像是curl 现在不论哪种语言都行
遇到一个问题
怎样获取图片连接
说下我的思路
第一步:遍历产品表 ,读取产品描述,获得里面的url属性 不论用哪种方式将图片下载都可以
第二步:修改数据库中src属性

现在关键问题是 怎样获得产品描述中的url
图片的地址一般都像上面说的那种,不知道有没有办法用正则将产品描述 分割一下 然后逐个的找图片,然后下载到服务器 ,修改单个数组中的值,最后再拼接成一个新的字符串 保存到数据库中?
lighwind 2012-07-08
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]
既然偷人家的网站,就别懒得写程序。你首先手工保存图片、手工替换url,然后再考虑自动化编写程序替换,这时候就简单了。一开始不勤快,一开始就想偷懒,最后一事无成。
[/Quote]


老大,现在就是想把图片保存到自己的服务器上,然后修改图片url的

happytonice 2012-07-08
  • 打赏
  • 举报
回复
将库中的链接导入到记事本中,考到迅雷去,让迅雷童鞋帮你,阿迅很勤快的呀
gsralex 2012-07-07
  • 打赏
  • 举报
回复
你遍历下数据库所有的数据,如果格式混在一起的话 ,就用正则给图片提出来,然后用webrequest访问,下载下来,格式化图片,保存到文件,然后将路径和之前在数据库找到的路径做替换
  • 打赏
  • 举报
回复
既然偷人家的网站,就别懒得写程序。你首先手工保存图片、手工替换url,然后再考虑自动化编写程序替换,这时候就简单了。一开始不勤快,一开始就想偷懒,最后一事无成。
lighwind 2012-07-07
  • 打赏
  • 举报
回复
刚网上查了一下资料,可以使用WebRequest对象 将图片下载到服务器某个文件下
现在关键是怎样获得img的src路径 然后下载过之后再修改数据库中的值
lighwind 2012-07-07
  • 打赏
  • 举报
回复
<img align="middle" alt="" src="http://www18.tx8cdn.com/photo/chenmeian/牛仔雪纺连衣裙-05.jpg" />
图片大部分都是这样
比方说想这样替换 将http://www18.tx8cdn.com/photo/chenmeian/牛仔雪纺连衣裙-05.jpg
替换成 otherPic/牛仔雪纺连衣裙-05.jpg
就是把图片路径改一下 但是最终名称没有变 前面加一个文件夹
然后把外链图片下载到这个文件夹下



bwangel 2012-07-07
  • 打赏
  • 举报
回复
这个技术实现不难。但php不适合作这种需要批量处理的工作。

图片地址一个个分析出来,然后用webrequest来请求指向的服务器,获取图片的字节流,然后存到服务器指定目录。
mizuho_2006 2012-07-07
  • 打赏
  • 举报
回复
可以通过正则表达式获取所有图片的URL,再进行下载
lighwind 2012-07-07
  • 打赏
  • 举报
回复
现在是这样,如果说他们把图片删除之后,本网站就不显示了
虽说把图片放在自己服务器上占空间,但这样用着“踏实”一点
mizuho_2006 2012-07-07
  • 打赏
  • 举报
回复
外部连接不行吗,很多大型网站都是有专门的图片服务器
lighwind 2012-07-07
  • 打赏
  • 举报
回复
数据库使用的是mysql 开发语言是php
希望知道的朋友指点一下

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧