C# winform 如何实现多文件上传到指定服务器,,,求demo,,,

如题所述

//获取openFileDialog控件选择的文件名数组(openFileDialog可多个文件选择)
private void button1_Click(object sender, EventArgs e)
{
label1.Text = "";
try
{
this.openFileDialog1.ShowDialog();
path = this.openFileDialog1.FileNames; //获取openFileDialog控件选择的文件名数组
string strpath = "";
for (int y = 0; y < path.Length; y++)
{
strpath += path[y];
}
textBox1.Text = strpath;
}
catch
{
this.lbl_ftpStakt.Text = "请选择文件!";
}
}
//上传按钮事件
private void button2_Click(object sender, EventArgs e)
{
this.lbl_ftpStakt.Visible = true; //设置上传信息标签可见
this.lbl_ftpStakt.Text = "连接服务器...";

try
{
for (i = 0; i < path.Length; i++)
{
filename = path[i].ToString();

//实例化事件类
myTest fo = new myTest(filename);
fo.startUpEvent+=new myTest.myUpEventsHandler(this.RunsOnWorkerThread); //注册事件
fo.mythreadStart(); //调用类的方法

FileInfo p = new FileInfo(path[i].ToString());
uploadSQL(p.Name); //上传到库
}
//label1.Text = "上传成功";
}
catch
{
string s="";
for (int x = i; x < path.Length; x++)
{
FileInfo file = new FileInfo(path[i].ToString());
s += file.Name + " ";
}
this.lbl_ftpStakt.Text = "上传失败";
MessageBox.Show(s.ToString()+" 上传失败","提示");
}
}
//连接ftp上传
public void RunsOnWorkerThread(string _filename)
{
//阻塞线程
mt.WaitOne();
Interlocked.Increment(ref flag); //状态值+1

this.lbl_ftpStakt.Text = "连接服务器中...";
FileInfo fileInf = new FileInfo(_filename);
FtpWebRequest reqFTP;
// 根据uri创建FtpWebRequest对象
reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://210.82.***.***/" + fileInf.Name));
// ftp用户名和密码
reqFTP.Credentials = new NetworkCredential("record", "files");
// 默认为true,连接不会被关闭
// 在一个命令之后被执行
reqFTP.KeepAlive = false;
// 指定执行什么命令
reqFTP.Method = WebRequestMethods.Ftp.UploadFile;
// 指定数据传输类型
reqFTP.UseBinary = true;
// 上传文件时通知服务器文件的大小
reqFTP.ContentLength = fileInf.Length;
//long _length = fileInf.Length; /////////
// 缓冲大小设置为2kb
int buffLength = 2048; ////
byte[] buff = new byte[buffLength];
int contentLen;
// 打开一个文件流 (System.IO.FileStream) 去读上传的文件
FileStream fs = fileInf.OpenRead();

try
{
// 把上传的文件写入流
Stream strm = reqFTP.GetRequestStream();
// 每次读文件流的2kb
contentLen = fs.Read(buff, 0, buffLength);
int allbye = (int)fileInf.Length;
int startbye = 0;
this.myProgressControl.Maximum = allbye;
this.myProgressControl.Minimum = 0;
this.myProgressControl.Visible = true;
this.lbl_ftpStakt.Visible = true;
this.lbl_ftpStakt.Text = "服务器连接中...";
// 流内容没有结束
while (contentLen != 0)
{
// 把内容从file stream 写入 upload stream
strm.Write(buff, 0, contentLen);
contentLen = fs.Read(buff, 0, buffLength);
startbye += contentLen;
this.lbl_ftpStakt.Text = "已上传:" + (int)(startbye / 1024) + "KB/" + "总长度:" + (int)(allbye / 1024) + "KB" + " " + " 文件名:" + fileInf.Name;
myProgressControl.Value = startbye;
}
// 关闭两个流
strm.Close();
fs.Close();
this.myProgressControl.Visible = false;
this.lbl_ftpStakt.Text = "上传成功!";
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Upload Error");
}
Interlocked.Decrement(ref flag);
mt.ReleaseMutex();//释放线程
}

/// <summary>
/// 委托事件类
/// </summary>
class myTest
{
public string filename;
public delegate void myUpEventsHandler(string _filename);
public event myUpEventsHandler startUpEvent;

public myTest()
{
}

/// <summary>
///
/// </summary>
/// <param name="_filename">上传的文件名</param>
public myTest(string _filename)
{
this.filename = _filename;
}

/// <summary>
/// 开始一个线程,执行事件
/// </summary>
public void mythreadStart()
{
Thread thr = new Thread(new ThreadStart(this.mystart));
thr.Start();
}

/// <summary>
/// 开始事件
/// </summary>
public void mystart()
{
startUpEvent(this.filename);
}
}
温馨提示:内容为网友见解,仅供参考
无其他回答

C# winform如何实现批量上传文件到远程服务器?
基本思路是远程服务器假设FTP,本地用System.Net.FtpWebRequest建立Ftp客户端,用NetworkCredential.NetworkCredential建立用户名和密码验证方式,用System.Net.WebRequestMethods.Ftp设置上传和下载命令,文件通过FileStream流进行发送和接收。

C#+winform,客户端实现大文件上传到服务器,这个问题怎么解决的啊,我现...
大文件的一般要通过ftp来操作,在服务器端建立FTP服务器,客户端本地写ftp上传代码。

C#的winForm程序中,如何点击添加按钮实现图片上传到服务器文件夹内,求...
那只能考虑把文件解析为二进制文件,保存到服务器。如此还要考虑文件大小的分包问题。

C#winform怎么上传文件到服务器
\/\/\/ \/\/\/ 上传 \/\/\/ \/\/\/ 要上传的本地文件名 public void Upload(string filename) { FileInfo fileInf = new FileInfo(filename); string uri = ftpURI + fileInf.Name; FtpWebRequest reqFTP; reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri)...

C# winform 怎么上传文件至服务器?
上传控件, 文本框 +button button的事件 绑定到上传控件 就行了,不过你得自己写点

C#(WinForm)上传图片到服务器
\/\/本地上传代码Files item = fis as Files;WebClient wc = new WebClient();string url = string.Format("{0}?Overwrite=true&Path={1}", "服务器上传地址", item.Path); wc.UploadFile(url, "POST", item.Path); \/\/服务器接收 string ServerSrc = context.Server.MapPath("~\/DownLogin\/...

用C#在winform窗口下点击按钮选择要提交的文件然后上传到数据库或其他...
...winfrom?直接用代码写啊~ IO操作数据流读取文件地址然后把文件转成二进制存进sql里。。然后在别的界面让别人可以下载到他们本地。。。这样就需要设置sql 服务器的远程访问功能以及你需要对二进制存库有了解了

c# winform 安装程序如何拷贝文件到目标机器?
替代方法:比如:config\/ 11.txt 22.txt 在代码里获得 config下所有 txt文件列表。让客户自己选择。如果客户想添加更改,只要不删除11 22.txt即可,如果你怕他们删除,那就隐藏掉 告诉用户 在此文件夹下添加文件类型为.txt

怎么在c#_winform实现图片上传功能,求源代码,有图更好,高分啊
将一张图片上传到指定的文件夹,然后在窗体上的PictrueBox控件中显示出来,效果看图 代码如下:private void btnUpload_Click(object sender, EventArgs e){ \/\/创建一个对话框对象 OpenFileDialog ofd = new OpenFileDialog();\/\/为对话框设置标题 ofd.Title = "请选择上传的图片";\/\/设置筛选的图片格式...

c#winform窗体如何实现服务器实时接收数据,不借助button
1、 Pull 也就是拉。 即Client把数据从Server中拉出来。因为winform本质是事件驱动,如果不想用button,那么最简单的方式就是用定时器(timer), 比如每10秒请求一次数据,这种方式本质上和button没有区别,还是通过事件来驱动应用,只不过是“自动”的去读取数据。优点是简单, 缺点是不及时(如果数据...

相似回答