`
jljxj
  • 浏览: 5985 次
  • 性别: Icon_minigender_1
  • 来自: 南京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

通用微博图片上传类

阅读更多
'***********************************************************************************
'***本程序可以自由传播,本人不对您使用本软件及代码造成的任何后果承担任何责任**
'***利用此代码挣钱了也无需告诉我******
'***作者:龙小龙 QQ:31519488,部分代码来源于网络***
'***感谢中国农业人才网www.5ajob.com 大力支持***
'***中国农业人才网,让伯乐与千里马不再是偶遇***
'***********************************************************************************

''' VB文件上传类,可以同时传多个文件 文字内容,也可以从网页上抓图片再上传

    Public c_strDestURL As String
    Public c_strFileName As String
    Public c_strFieldName As String
    Public c_strBoundary As String
    Public c_strContentType  As String ' text/plain or image/pjpeg and so on "application/upload" text/plain
    
    Public c_param As Dictionary
    '格式key->字段名 value->类型|属性|内容
    '字段名 类型|属性|内容
    '类型 目前有txt = 0 '文本pic = 1 '图片File = 2 '文件 URL = 3 '网址
    '属性是类型下的属性 比如pic 下的属性就是文件格式pic jpg png等
    'With c_param
    '.add "pic", "url|pic|http://www.xx.com/1.jpg"
    '.add "pic1", "pic|jpg|C:\Documents and Settings\Administrator\桌面\1.jpg"
    '.add "status", "txt|raw|大家好y"
    '.add "txtfile", "file|txt|C:\Documents and Settings\Administrator\桌面\1.txt"
    'End With


    Public c_strResponseText As String
    Public c_boolPrepared As Boolean
    Public c_strErrMsg As String

    Private Type Field
     s_FieldName As String '字段名
     s_FieldValue As String '字段值
     s_FieldType As String '字段类型
     s_FieldPro As String '字段属性
     s_FieldCon As String '字段内容
    End Type

'Private Enum FieldType
'txt = 0 '文本
'pic = 1 '图片
'File = 2 '文件
'URL = 3 '网址
'End Enum
    Public Sub Class_Initialize()
        c_strDestURL = ""
        c_strFileName = ""
        c_strContentType = "application/upload"
        c_strFieldName = "file"
        c_strBoundary = "---------------------------" & LCase(c10ton(Right("0" & Day(Date), 2) & Right("0" & Hour(Time), 2) & Right("0" & Minute(Time), 2) & Right("0" & Second(Time), 2), 16))
        c_boolPrepared = False
    End Sub
    
    Public Sub Class_Terminate()
    End Sub
    
    ''' 公共调用函数,文件上传
    Public Function vbsUpload()
        Call CheckRequirements
        If c_boolPrepared Then
             UploadFile c_strDestURL, c_param
        Else
            ' c_strErrMsg
        End If
    End Function
    
    ''' 检查程序工作环境
    Private Function CheckRequirements()
            On Error Resume Next
              CreateObject ("MSXML2.XMLHTTP")
              If Not Err = 0 Then
                  c_strErrMsg = c_strErrMsg & vbCrLf & Err.Descriptiof
              Else
                  c_boolPrepared = True
              End If

    End Function
    
    
    ''' 文件上传
     Private Function UploadFile(ByVal DestURL As String, ByVal param As Dictionary)
        Boundary = c_strBoundary
        bFormData = BuildFormData(Boundary, param)
'        Debug.Print rsBinarytoString(bFormData)
        WinHTTPPostRequest DestURL, bFormData, Boundary
    End Function
    
    ''' WinHTTPPostRequest
    Private Function WinHTTPPostRequest(URL, FormData, Boundary)
        Dim xmlhttp
          Set xmlhttp = CreateObject("MSXML2.XMLHTTP")
          On Error Resume Next
          xmlhttp.open "POST", URL, False
         xmlhttp.setRequestHeader "Content-Type", "multipart/form-data; boundary=" + Boundary
          xmlhttp.send FormData
          c_strResponseText = xmlhttp.responseText ' 服务端返回信息
          Set xmlhttp = Nothing
    End Function

    '''组合上传数据包 multipart/form-data document Header + Content
    Private Function BuildFormData(ByVal Boundary As String, ByVal param As Dictionary)
        Dim FileContents() As Byte, FormData() As Byte
        Dim Pre As String
        Dim Po As String
'        Boundary = c_strBoundary
  
      Const adlongvarbinary = 205
      Dim rs: Set rs = CreateObject("ADODB.Recordset")
      rs.Fields.Append "b", adlongvarbinary, 100
      rs.open
      rs.AddNew
      
      Pre = "--" '+ Boundary + vbCrLf
'      Debug.Print Pre;
      FormData = SaveStringToByteArry(Pre)
      rs("b").AppendChunk (FormData)
      
        Dim i As Integer, t As Integer
        Dim tempstr As String, FieldVaue As String
        For i = 0 To param.Count - 1
            two = IIf(t > 0, vbCrLf & "--", "") '如果有1个以上的字段,中间的就要多2个--,很关键,否则只能传成功1个文件.
            Dim sField As Field, aFieldVaue
            With sField
            .s_FieldName = param.Keys(i)
            .s_FieldValue = param.Items(i)
            
            If InStr(.s_FieldValue, "|") = 0 Then
            .s_FieldValue = "txt|raw|" & .s_FieldValue
            End If
         
            
            aFieldVaue = Split(.s_FieldValue, "|")
            .s_FieldType = aFieldVaue(0)
            .s_FieldPro = aFieldVaue(1)
            .s_FieldCon = aFieldVaue(2)

'            MsgBox .s_FieldName

            Select Case LCase(.s_FieldType)
             Case "txt"
             
'               Select Case LCase(.s_FieldPro)
'                 Case "raw"
'                   .s_FieldCon = UTF8Encode(.s_FieldCon)
'                 Case Else
'                End Select
                
                tempstr = txtFields(.s_FieldName, two & Boundary)
                FormData = SaveStringToByteArry(tempstr) '二进制头
                rs("b").AppendChunk (FormData)
                FormData = stream_StringtoBinary(.s_FieldCon, "UTF-8")
                rs("b").AppendChunk (FormData)
                tempstr = vbCrLf '后面有个回车
                FormData = SaveStringToByteArry(tempstr) '二进制头
                rs("b").AppendChunk (FormData)
             Case "pic", "file"
                FileContents = GetFile(.s_FieldCon) ' 二进制文件内容
                Select Case LCase(.s_FieldPro)
                 Case "gif"
                   ContentType = "image/gif"
                 Case "jpg"
                   ContentType = "image/pjpeg"
                 Case "png"
                  ContentType = "image/x-png"
                 Case "txt"
                   ContentType = "application/upload"
                 Case Else
                   ContentType = "image/unknow"
                End Select
                tempstr = mpFields(.s_FieldName, .s_FieldCon, ContentType, two & Boundary)
                FormData = SaveStringToByteArry(tempstr) '二进制文件头
                rs("b").AppendChunk (FormData)
                rs("b").AppendChunk (FileContents) '二进制文件本身
              Case "url" '抓取网页上的图片
               If SaveRemoteFile2Bin(.s_FieldCon, FileContents) = True Then
                    ContentType = "image/unknow"
                    tempstr = mpFields(.s_FieldName, .s_FieldCon, ContentType, two & Boundary)
                    FormData = SaveStringToByteArry(tempstr) '二进制文件头
                    rs("b").AppendChunk (FormData)
                    rs("b").AppendChunk (FileContents) '二进制文件本身
               End If
            End Select
           End With
           t = t + 1
        Next
        Po = vbCrLf + "--" + Boundary + "--" + vbCrLf '
        
        FormData = SaveStringToByteArry(Po)
        rs("b").AppendChunk (FormData)
        rs.Update
        BuildFormData = rs("b")
        rs.Close
    
    End Function
    
    'Converts OLE string To multibyte string
    Private Function StringToMB(ByVal sCon As String)
      Dim i, tempstr
      For i = 1 To Len(sCon)
        tempstr = tempstr & ChrB(Asc(Mid(sCon, i, 1)))
      Next
      StringToMB = tempstr
    End Function

    
    ''' 组织HTTP头
    Private Function mpFields(ByVal FieldName As String, ByVal FileName As String, ByVal ContentType As String, ByVal Boundary As String)
      Dim MPTemplate 'template For multipart header
      MPTemplate = "{boundary}" + vbCrLf + "Content-Disposition: form-data; name=""{field}"";" + _
       " filename=""{file}""" + vbCrLf + _
       "Content-Type: {ct}" + vbCrLf + vbCrLf
      Dim Out
      Out = Replace(MPTemplate, "{field}", FieldName)
      Out = Replace(Out, "{file}", FileName)
      Out = Replace(Out, "{boundary}", Boundary)
      mpFields = Replace(Out, "{ct}", ContentType)
    End Function
    
    Private Function txtFields(ByVal FieldName As String, ByVal Boundary As String)
      txtContentTemplate = "{boundary}" + vbCrLf + "Content-Disposition: form-data; name=""{0}""" + vbCrLf + vbCrLf
      Dim Out
      Out = Replace(txtContentTemplate, "{0}", FieldName)
      Out = Replace(Out, "{boundary}", Boundary)
      txtFields = Out
    End Function
    
    ''' 二进制载入文件内容
    Private Function GetFile(ByVal FileName As String)
      Dim Stream: Set Stream = CreateObject("ADODB.Stream")
      Stream.Type = 1 'Binary
      Stream.open
      Stream.LoadFromFile FileName
      GetFile = Stream.Read
      Stream.Close
    End Function
    

Function SaveRemoteFile2Bin(ByVal RemoteFileUrl As String, ByRef RemoteFileCon() As Byte) As Boolean ' 保存远程文件
    On Error Resume Next
    Dim ARetrieval, GetRemoteData
    Set Retrieval = CreateObject("MSXML2.XMLHTTP")
    With Retrieval
        .open "Get", RemoteFileUrl, False, "", ""
        .send
        RemoteFileCon = .responseBody
        SaveRemoteFile2Bin = True
    End With
    If Err.Number <> 0 Then
        Err.Clear
        SaveRemoteFile2Bin = False
        Exit Function
    End If
    Set Retrieval = Nothing
   
End Function

 

分享到:
评论

相关推荐

    微博源代码

    用户可以编写文字、上传图片、视频,甚至嵌入链接,形成一条微博。源代码中,这部分涉及到文本编辑器的实现、多媒体文件的上传和处理(如图片压缩、视频转码)、以及富文本的显示。这些功能通常由前后端协作完成,...

    腾讯QQ微博分享

    开发者可以通过调用SDK提供的API,实现在应用内发起微博发布、图片上传、链接分享等操作,并且能够处理用户的登录授权,确保安全。 其次,`iOS_OpenSDK_2.9.0.91_all.zip` 文件可能是腾讯QQ的开放平台SDK的一个版本...

    ASP微博系统

    9. **下载功能(down.asp)**:可能提供了文件下载功能,比如用户上传的图片或其他附件,其他用户可以通过此接口下载。 10. **错误处理(die.asp)**:当系统遇到错误时,该文件可能用于处理异常并展示相应的错误...

    大猫通用图床图片备份、下载、搬迁工具 v2.0.zip

    大猫通用图床图片备份、下载、搬迁工具简介 一些站长对于文章的图片,要么是使用了一些免费的图床,要么是自己重新租用了服务器专门放置图片,也有些站长是将图片放到类似新浪微博那种说不定什么时候就不提供外链的...

    微博程序,ASP+ACCESS版的

    这种类型的系统通常用于实现基本的社交媒体功能,如发布微博、转发、回复、上传图片以及分享链接等。 在ASP编程中,这些功能通常通过一系列的ASP文件来实现,每个文件对应特定的功能模块: 1. **mfunc.asp**:这...

    UCHOME整合新浪微博QQ人人网GBK UTF8插件

    同时,用户在UCHOME上的活动,如发表日志、上传图片、参与讨论等,都可以同步到关联的社交账户,扩大了信息的传播范围,提升了社区的活跃度。 其次,插件支持GBK和UTF8两种编码格式,这极大地拓宽了其适用范围。GBK...

    新浪微博改版渐进:移动端接入第三方应用.docx

    - **多图功能**:支持用户一次性上传多张图片,适用于PC和移动平台。 - **第三方应用接入**: - 首次在移动端实现第三方应用接入,用户可通过“附件”按钮选择插入来自其他应用的内容(如话题、图片、音乐等)。 -...

    大猫通用图床图片备份、下载、搬迁工具 v2.0

    大猫通用图床图片备份、下载、搬迁工具简介一些站长对于文章的图片,要么是使用了一些免费的图床,要么是自己重新租用了服务器专门放置图片,也有些站长是将图片放到类似新浪微博那种说不定什么时候就不提供外链的...

    易语言-新浪发图文微博

    6. **图片上传**:如果要发送图文微博,还需先将本地图片上传到新浪的图床,获得图片的URL。同样通过易语言的网络模块和API接口完成这一过程,获取到的图片URL再作为参数添加到微博内容中。 7. **错误处理**:在...

    我记录网站综合系统 1.6源码

    论坛上传图片增加到原图链接 在论坛附件中增加带进度条的上传功能 在编辑器中增加带进度条的上传功能 后台配置增加上传文件和图片的大小限制 用户空间首页加入微博发布框 配合ajaxLoader/frmLoader,门户区块...

    PHP酷瓜云课堂 v1.6.0

    修正内容图片上传问题 去除user全文索引 调整notice目录结构 更新默认图片 更新直播名格式化 更新微博分享链接 文章单页等增加SEO关键字 专题增加封面上传 优化router扫描规则 升级layui至v2.7.6 增加

    K8采集器基础版

    4、操作简单:采集发布一体化设计,一键转载文字、图片、附件,自动下载/上传图片和附件; 5、智能化、交互性强:支持自动登录被采集网站论坛,自动签到,自动回复主题帖,自动购买主题帖; 6、灵活、扩展方便:...

    基于PHP的Say Microblog 微博客系统.zip

    7. **库文件和类**:封装通用功能,如邮件发送、图片处理等。 8. **数据库文件**:SQL脚本或数据文件,用于创建和填充数据库。 9. **图片和其他媒体文件**:用户上传的头像、微博中的图片等。 10. **文档**:安装...

    wordpress蛋花儿网站模板

    5.发布文章上传图片需设置为特色图片,缩略图中等尺寸值建议为最大宽度193,最大高度20048,小缩略图尺寸值建议为75x75(在后台的 设置-媒体-图像大小 里修改) 6.关闭后台评论嵌套功能(在后台的 设置-讨论-启用...

    Gblog1.5install博客自动安装

    2、修正编辑器中上传图片问题。 3、修正相册插件上传问题。 4、修正友情链接插件验证码问题。 其他一些修改... 安装Gblog 1.从下载页面下载Gblog最新版本安装包。 2.解压安装包,上传包内文件至服务器。 3....

    新浪在线编辑器

    用户在编辑文章时,可以通过内置的图片上传功能,将本地图片插入到内容中,提高文章的可读性和吸引力。这些图片可能会被上传到服务器,或者使用Base64编码嵌入到HTML中,以适应不同的使用场景。 `editor`可能是一个...

    .net开源的综合开发框架wojilu框架.zip

    wojilu Log一个轻量级 Json 解析器一个简易的前端 Ajax 库(弹窗、局部刷新、验证、上传等)2. 我记录网站综合系统 2.0名称: 我记录网站综合系统 2.0网址: http://www.wojilu.com下载: 请到论坛置顶帖子中下载。...

    Designer's site 特色建站CMS v1.0 正式版.rar

    b) 文章支持主题图片及在线图片剪裁,作品案例模块支持缩略图,加快页面加载速度。 c) 支持简单的会员模块,具有相应的留言评论、下载、上传、注册、密保权限和会员反馈、VIP资源共享系统。会员支持超级管理员权限...

    Designer’s site program全站静态系统V1.0 正式版

    b) 文章支持主题图片及在线图片剪裁,作品案例模块支持缩略图,加快页面加载速度。 c) 支持简单的会员模块,具有相应的留言评论、下载、上传、注册、密保权限和会员反馈、VIP资源共享系统。会员支持超级管理员权限...

    Designer's site 特色建站CMS.rar

    b) 文章支持主题图片及在线图片剪裁,作品案例模块支持缩略图,加快页面加载速度。 c) 支持简单的会员模块,具有相应的留言评论、下载、上传、注册、密保权限和会员反馈、VIP资源共享系统。会员支持超级管理员权限...

Global site tag (gtag.js) - Google Analytics