http://www.sufeinet.com/plugin.php?id=keke_group

苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

分布式系统框架(V2.0) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper爬虫框架(V2.7-含.netcore) HttpHelper官方出品,爬虫框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 开源的爬虫类,支持多种模式和属性 源码 - 代码生成器 - 讨论区 - 教程- 例子

查看: 3370|回复: 4

[C#语言基础] 上传图片封装模块,直接可以使用的。

[复制链接]
发表于 2018-12-10 02:33:32 | 显示全部楼层 |阅读模式
采用vb.net编写,c#的可以自行转换使用
[C#] 纯文本查看 复制代码
''' <summary>
        ''' 根据文件路径创建上传的字节集
        ''' </summary>
        ''' <param name="boundary">分割符</param>
        ''' <param name="stringDict">上传文件的附带参数字典</param>
        ''' <param name="filePath">上传文件路径</param>
        ''' <param name="fileName">文件头数据体中filename的value值</param>
        ''' <returns>返回http POST上POSTDAT的数组</returns>
        Public Function CreatFileToPostBytes(boundary As String, stringDict As IDictionary(Of String, String), filePath As String, fileName As String, postEncoding As Encoding) As Byte()
            '判断字典跟文件路径是否为空
            If stringDict Is Nothing OrElse String.IsNullOrWhiteSpace(filePath) OrElse String.IsNullOrWhiteSpace(boundary) Then
                Return Nothing
            End If

            ' 边界符
            Dim beginBoundary As Byte() = postEncoding.GetBytes("--" & boundary & vbCrLf)

            ' Key-Value数据
            Dim stringKeyHeader As String = "Content-Disposition: form-data; name=""{0}""" & vbCrLf &
                                        "Content-Length: {1}" & vbCrLf & vbCrLf &
                                        "{2}" & vbCrLf
            '& "--" & boundary & vbCrLf
            '文件头数据体
            Dim filePartHeader As String = "Content-Disposition: form-data; name=""{0}""; filename=""{1}""" & vbCrLf &
                                       "Content-Type: image/jpeg" & vbCrLf &
                                       "Content-Length: {2}" & vbCrLf & vbCrLf

            ' 最后的结束符
            Dim endBoundary = postEncoding.GetBytes(vbCrLf & "--" & boundary & "--" & vbCrLf)

            '获取文件二进制数组
            Dim fileStream As FileStream = New FileStream(filePath, FileMode.Open)
            Dim fileByte(fileStream.Length - 1) As Byte
            fileStream.Read(fileByte, 0, fileByte.Length)
            fileStream.Dispose()

            Dim fileHeader As String = String.Format(filePartHeader, "file", fileName, fileByte.Length)

            Dim fileHeaderBytes As Byte() = postEncoding.GetBytes(fileHeader)

            ' 开始拼数据
            Using memStream = New MemoryStream()
                '组装开始分界线数据体 到内存流中
                memStream.Write(beginBoundary, 0, beginBoundary.Length)

                ' 组装上传文件附加携带的参数 到内存流中
                For Each formitembytes As Byte() In
                From key As String In stringDict.Keys
                Select formitem = String.Format(stringKeyHeader, key, postEncoding.GetBytes(stringDict(key)).Length, stringDict(key))
                Select postEncoding.GetBytes(formitem)
                    memStream.Write(formitembytes, 0, formitembytes.Length)
                    '写入分界符
                    memStream.Write(beginBoundary, 0, beginBoundary.Length)
                Next

                ' 组装文件头数据体到内存流中
                memStream.Write(fileHeaderBytes, 0, fileHeaderBytes.Length)
                ' 组装文件数据体到内存流中
                memStream.Write(fileByte, 0, fileByte.Length)
                ' 写入最后的结束边界符
                memStream.Write(endBoundary, 0, endBoundary.Length)
                Dim ResultBytes As Byte() = memStream.ToArray
                Return ResultBytes
            End Using
        End Function


各个不同的网站可能上传的附件参数跟文件头数据里的type不一样,请自行修改试用。转完后是byte()数组,可以直接把postdatatype设置成byte属性,然后直接post就好了。


1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
发表于 2018-12-10 10:44:23 | 显示全部楼层
我只是路过打酱油的。
发表于 2018-12-10 10:54:00 | 显示全部楼层
如果是 base64编码的方式 上传,保存图片,不知道怎么样子,有场合限制吗?
 楼主| 发表于 2018-12-10 10:58:28 | 显示全部楼层
惜 发表于 2018-12-10 10:54
如果是 base64编码的方式 上传,保存图片,不知道怎么样子,有场合限制吗?

一样的,你就把文件的2进制再转成base64就可以了
具体得不同网站要抓包看看
发表于 2018-12-10 13:54:33 | 显示全部楼层
强烈支持楼主ing……
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备18043678号-2)

GMT+8, 2024-11-16 05:36

© 2014-2021

快速回复 返回顶部 返回列表