千家信息网

上传文件到服务器端_C#

发表于:2025-12-03 作者:千家信息网编辑
千家信息网最后更新 2025年12月03日,using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Colle
千家信息网最后更新 2025年12月03日上传文件到服务器端_C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
using System.Net;
using System.IO;

namespace www.xinduofen.cn
{
///


/// C#与http服务器端进行对接的工具类
///

class www.xinduofen.com
{
///
/// 用于缓存服务器端传输到客户端的SESSIONID或者JSESSIONID
///

private Cookie sessionidCookie = null;

///
/// 向HttpWebServer端上传文件(使用的是"post"方式)
///

/// 请求网址
/// 请求参数集合,无需参数时传入null值
/// 请求cookie集合,无需cookie时传入null值
/// 上传文件集合《控件名,上传文件的保存位置(包括"文件名"."扩展名")》,无需上传时传入null值
/// 返回请求结果字符串,返回为null代表请求失败
public String setFilesToHttpWebServer(String url, Hashtable data, CookieCollection cookies, Hashtable filesSaveAddress)
{
//用于缓存服务器端传输回来的结果字符串
string result = null;

if (string.IsNullOrEmpty(url))
{
return null;//传入参数异常
}


//用于分割信息部分的分隔符(不能与消息原文冲突)
String boundary = "HttpWebTool" + DateTime.Now.Ticks;
//结束分隔符数据流
byte[] andBoundary = Encoding.UTF8.GetBytes("--" + boundary + "--");
//新行字符串数据流
byte[] newline = Encoding.UTF8.GetBytes("\r\n");
try
{
HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(url);
//请求方式
req.Method = "POST";
//声明客户端只接收txt类型的内容
req.Accept = "text/plain";
//以消息的形式向服务器传递参数和数据流
req.ContentType = "multipart/form-data; boundary=" + boundary;
//设置cookie盒子(客户端请求的cookie和服务器端返回的cookie就放在此盒子中)
CookieContainer cookieContainer = new CookieContainer();
if (sessionidCookie != null && !string.IsNullOrEmpty(sessionidCookie.Domain))
{
cookieContainer.Add(sessionidCookie);
}
if (cookies != null)
{
cookieContainer.Add(cookies);//添加调用者传入的cookie集合
}
req.CookieContainer = cookieContainer;
//用于累计数据流长度,初始化为0
long dataCount = 0;
byte[] parameterBytes = getParameterBytes(data, boundary);
if (parameterBytes != null && parameterBytes.Length>0)
{
//累计请求参数字符串数据流大小
dataCount += parameterBytes.Length;
}
//<控件名,上传文件的消息头部分字符流byte[]>
Hashtable uploadFileDeclareBytesSet = new Hashtable();
//如果有要上传的文件
if (filesSaveAddress != null && filesSaveAddress.Count > 0)
{
foreach (DictionaryEntry de in filesSaveAddress)
{
//如果将要上传的文件存在
if (File.Exists(de.Value.ToString()))
{
byte[] uploadFileDeclareBytes = getUploadFileDeclareBytes(de, boundary);
if (uploadFileDeclareBytes!=null)
{
//累计上传文件消息头部描述字符串数据流大小
dataCount += uploadFileDeclareBytes.Length;
//累计上传文件正文数据流大小
dataCount += new FileInfo(de.Value.ToString()).Length;
//累计新行字符串数据流数据流大小
dataCount += newline.Length;
uploadFileDeclareBytesSet.Add(de.Key.ToString(), uploadFileDeclareBytes);
}
}
}
}
//如果有数据流
if (dataCount>0)
{
//累计结束分隔符数据流大小
dataCount += andBoundary.Length;
//请求数据流的长度
req.ContentLength = dataCount;

using (Stream requestStream = req.GetRequestStream())
{
if (parameterBytes != null && parameterBytes.Length > 0)
{
requestStream.Write(parameterBytes, 0, parameterBytes.Length);
}
if (filesSaveAddress != null && filesSaveAddress.Count > 0)
{
foreach (DictionaryEntry de in filesSaveAddress)
{
if (File.Exists(de.Value.ToString()))
{
byte[] uploadFileDeclareBytes = (byte[])uploadFileDeclareBytesSet[de.Key.ToString()];
requestStream.Write(uploadFileDeclareBytes, 0, uploadFileDeclareBytes.Length);
using (FileStream fileStream = new FileStream(de.Value.ToString(), FileMode.Open, FileAccess.Read))
{
//建立字节组,并设置它的大小是多少字节
byte[] bytes = new byte[10240];
int n = -1;
while ((n = fileStream.Read(bytes, 0, bytes.Length)) > 0)
{
requestStream.Write(bytes, 0, n); //将指定字节的流信息写入文件流中
}
}
requestStream.Write(newline, 0, newline.Length);
}
}
}

requestStream.Write(andBoundary, 0, andBoundary.Length);
}
}

//接收返回值
using (HttpWebResponse myResponse = (HttpWebResponse)req.GetResponse()) {
using (StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8)) {
result = reader.ReadToEnd().Trim();
}
if (myResponse.Cookies["SESSIONID"] != null)
{
sessionidCookie = myResponse.Cookies["SESSIONID"];
}
else
{
if (myResponse.Cookies["JSESSIONID"] != null)
{
sessionidCookie = myResponse.Cookies["JSESSIONID"];
}
}
}
}
catch (Exception)
{
Console.WriteLine("请查看传入参数是否正确或者服务器是否关闭");
}


return result;
}
///


/// 获得参数data的消息数据流,以"\r\n"结尾
///

/// 请求参数集合,无需参数时传入null值
/// 消息分隔符
/// 返回参数data的数据流,返回为空代表获得失败
private byte[] getParameterBytes(Hashtable data, String boundary)
{
byte[] parameterBytes = null;

//如果有请求参数
if (data != null && data.Count > 0)
{
string parameterStr = "";
foreach (DictionaryEntry de in data)
{
parameterStr += "--" + boundary;
parameterStr += "\r\n" + "Content-Disposition: form-data;name=\"" + de.Key.ToString() + "\"";
parameterStr += "\r\n" + "Content-Type: text/plain; charset=UTF-8";
parameterStr += "\r\n\r\n" + de.Value.ToString();
parameterStr += "\r\n";
}
if (!string.IsNullOrEmpty(parameterStr))
{
parameterBytes = Encoding.UTF8.GetBytes(parameterStr);//将上传字符串数据打包成数据流
}
}

return parameterBytes;
}
///


/// 获得上传文件的消息头部分字符流,以"\r\n\r\n"结尾
///

/// 上传文件《控件名,上传文件的保存位置(包括"文件名"."扩展名")》
/// 消息分隔符
/// 返回上传文件的消息头部分字符流,返回会为null代表获得失败
private byte[] getUploadFileDeclareBytes(DictionaryEntry de, String boundary)
{
byte[] uploadFileDeclareBytes = null;

//上传文件的消息头描述部分
string uploadFileDeclareStr = "";
uploadFileDeclareStr += "--" + boundary;
uploadFileDeclareStr += "\r\n" + "Content-Disposition: form-data;name=\"" + de.Key.ToString() + "\"; filename=\"" + de.Value.ToString() + "\"";
uploadFileDeclareStr += "\r\n" + "Content-Type: application/octet-stream";
uploadFileDeclareStr += "\r\n\r\n";
if (!string.IsNullOrEmpty(uploadFileDeclareStr))
{
uploadFileDeclareBytes = Encoding.UTF8.GetBytes(uploadFileDeclareStr);//将上传字符串数据打包成数据流
}


return uploadFileDeclareBytes;
}


}
}
内容所有权属于越康体育(专业从事体质测试仪,学生体质测试仪的研究)

数据 数据流 文件 参数 字符 消息 字符串 服务器 服务 大小 分隔符 代表 头部 字节 客户 位置 体质 信息 内容 客户端 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 明日之后更新服务器怎么开启 丹东市网络安全态势感知平台 数据库background 网络技术需要学习c语言吗 网络技术和电商公司 我的世界服务器如何管理 简述数据库管理的数据存取过程 上海彭塔网络技术有限公司 网络安全报道文章 福州道道通网络技术 咨询网络技术服务平台 网络安全小课堂第一期 网站功能开发后端步骤数据库 重庆市网络安全总队会寄身份证吗 软件开发是大趋势 web软件开发教程 大连地税软件开发公司 网络良好但无法连接服务器 医院购服务器申请报告 华辰软件开发有限公司骗人 数据库选取2018年日期 广播电视网络安全通报机制 全国碳预算数据库 苏州戴尔服务器详细信息 服务器php环境 消防大队网络安全应急预案 数据库技术发展趋势展望 数据库安全性了解 怎么查看连接服务器里的网址 为什么服务器拒绝发送邮件地址
0