求C# windows应用程序上传文件到指定IP的机器上。

cstester 2009-10-28 01:10:13
例如:

窗体1 : 有个按钮,图片框,当点这个按钮的时候 就传送1.jpg 到IP为 192.168.1.2的机器的D:\images下。

传送成功后,图片框从192.168.1.2 的机器上 加载D:\images\1.jpg

怎么实现这个过程。

说白了 就是 实现类似QQ头像上传的效果的。上传到服务器。并且下次登陆从服务器那边取出来。

最好有关键部分的代码。
...全文
1528 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
hh676325 2012-04-14
  • 打赏
  • 举报
回复
怎么调用
zhao_xiaolu 2011-03-21
  • 打赏
  • 举报
回复
怎么调用这个方法
oneatree 2010-05-19
  • 打赏
  • 举报
回复
mark
mxc1225 2010-02-02
  • 打赏
  • 举报
回复
Good
hecong875 2009-10-28
  • 打赏
  • 举报
回复

/// <summary>
/// 建立DOS连接
/// </summary>
/// <param name="path">要建立连接的服务器IP以及路径</param>
static public void DOSConnected()
{
string path = GetServerSavePath();
Process proc = new Process(); //实例化一个Process类
proc.StartInfo.FileName = "cmd.exe"; //设定程序名
proc.StartInfo.Arguments = "/c net use Z: \\\\" + path; //设定程式执行参数,此命令意思是将参数path代表的服务器路径虚拟为本地的Z盘
proc.StartInfo.CreateNoWindow = false; //设置不显示窗口
proc.StartInfo.UseShellExecute = false; //关闭Shell的使用
proc.StartInfo.RedirectStandardInput = true;//重定向标准输入
proc.StartInfo.RedirectStandardOutput = true; //重定向标准输出
proc.StartInfo.RedirectStandardError = true; //重定向错误输出
proc.Start(); //启动
proc.WaitForExit();
}
/// <summary>
/// 文件拷贝 从网站服务器拷贝到文件服务器
/// </summary>
/// <param name="FilePath">本地文件路径</param>
static public void DOSXCopy(string FilePath)
{
try
{
Process proc = new Process(); //实例化一个Process类
proc.StartInfo.FileName = "cmd.exe"; //设定程序名
proc.StartInfo.Arguments = "/c XCOPY " + FilePath + " Z:\\";//此命令意思是使用XCOPY命令将FilePath表示的文件拷贝到Z盘
proc.StartInfo.CreateNoWindow = false; //设置不显示窗口
proc.StartInfo.UseShellExecute = false; //关闭Shell的使用
proc.StartInfo.RedirectStandardInput = true;//重定向标准输入
proc.StartInfo.RedirectStandardOutput = true; //重定向标准输出
proc.StartInfo.RedirectStandardError = true; //重定向错误输出
proc.Start();
proc.WaitForExit();
}
catch(Exception ex)
{
string time = System.DateTime.Now.ToString("yyyy年MM月dd日 HH点mm分", DateTimeFormatInfo.InvariantInfo);
string sss = "图片保存日志.txt";
//指定路径
sss = "d:\\" + sss;
//如果文件a.txt存在就打开,不存在就新建 .append 是追加写
FileStream fst = new FileStream(sss, FileMode.Append);
//写数据到a.txt格式
StreamWriter swt = new StreamWriter(fst, System.Text.Encoding.GetEncoding("utf-8"));
//写入
swt.WriteLine(time + '\r' + "保存路径为:" + '\r' + FilePath + '\r' + "出错为:" + '\r' + ex);
swt.Close();
fst.Close();
}
}
/// <summary>
/// 文件拷贝 从文件服务器到网站服务器
/// </summary>
/// <param name="FilePath">本地文件路径</param>
static public void DOSDownLode(string FileName, string LocalPath)
{
Process proc = new Process(); //实例化一个Process类
proc.StartInfo.FileName = "cmd.exe"; //设定程序名
proc.StartInfo.Arguments = "/c XCOPY Z:\\" + FileName + " " + LocalPath;//此命令意思是使用XCOPY命令将FilePath表示的文件拷贝到Z盘
proc.StartInfo.CreateNoWindow = false; //设置不显示窗口
proc.StartInfo.UseShellExecute = false; //关闭Shell的使用
proc.StartInfo.RedirectStandardInput = true;//重定向标准输入
proc.StartInfo.RedirectStandardOutput = true; //重定向标准输出
proc.StartInfo.RedirectStandardError = true; //重定向错误输出
proc.Start();
proc.WaitForExit();
}
/// <summary>
/// 删除与服务器的连接
/// </summary>
static public void DOSDelConnected()
{
Process proc = new Process(); //实例化一个Process类
proc.StartInfo.FileName = "cmd.exe"; //设定程序名
proc.StartInfo.Arguments = "/c net use Z: /delete ";//此命令意思是删除与虚拟盘Z的连接
proc.StartInfo.CreateNoWindow = false; //设置不显示窗口
proc.StartInfo.UseShellExecute = false; //关闭Shell的使用
proc.StartInfo.RedirectStandardInput = true;//重定向标准输入
proc.StartInfo.RedirectStandardOutput = true; //重定向标准输出
proc.StartInfo.RedirectStandardError = true; //重定向错误输出
proc.Start();
proc.Kill();
proc.WaitForExit();
proc.Refresh();
}

/// <summary>
/// 删除文件服务器的文件
/// </summary>
static public void DOSDelFile(string FileName)
{
Process proc = new Process(); //实例化一个Process类
proc.StartInfo.FileName = "cmd.exe"; //设定程序名
proc.StartInfo.Arguments = "/c del Z:\\" + FileName;//此命令意思是删除Z盘下名为FileName的文件
proc.StartInfo.CreateNoWindow = false; //设置不显示窗口
proc.StartInfo.UseShellExecute = false; //关闭Shell的使用
proc.StartInfo.RedirectStandardInput = true;//重定向标准输入
proc.StartInfo.RedirectStandardOutput = true; //重定向标准输出
proc.StartInfo.RedirectStandardError = true; //重定向错误输出
proc.Start();
proc.WaitForExit();
}
hecong875 2009-10-28
  • 打赏
  • 举报
回复
/// <summary>
/// FTP上传文件方法,设定ftp下的保存路径,文件名
/// </summary>
/// <param name="ftpServerIP">ftp地址</param>
/// <param name="ftpUserID">ftp用户名</param>
/// <param name="ftpPassword">ftp密码</param>
/// <param name="streamRead">上传文件流</param>
/// <param name="savePath">文件名(可带相对路径)</param>
/// <exception >throw</exception>
protected void UploadFileByFTP(string ftpServerIP, string ftpUserID, string ftpPassword, Stream streamRead, string filename)
{
string l_notice = "";//上传提示
string uri = string.Empty;
//如果filename为空提示选择文件
if (filename == null || filename == "")
{
l_notice = "Please select File !";
}
else
{
try
{


if (filename.StartsWith("/"))
{
filename = filename.Remove(0, 1);
}
uri = "ftp://" + ftpServerIP + "/" + filename;

FtpWebRequest reqFTP;
// 根据uri创建FtpWebRequest对象
reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));

// ftp用户名和密码
reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);

// 默认为true,连接不会被关闭
// 在一个命令之后被执行
reqFTP.KeepAlive = false;

// 指定执行命令
reqFTP.Method = WebRequestMethods.Ftp.UploadFile;

// 指定数据传输类型
reqFTP.UseBinary = true;

// 上传文件时通知服务器文件的大小
reqFTP.ContentLength = streamRead.Length;

// 缓冲大小设置为5kb
int buffLength = 5048;

byte[] buff = new byte[buffLength];
int contentLen;
Stream streamWrite = reqFTP.GetRequestStream();
streamRead.Flush();
contentLen = streamRead.Read(buff, 0, buffLength);
while (contentLen != 0)
{
streamWrite.Write(buff, 0, contentLen);
contentLen = streamRead.Read(buff, 0, buffLength);
}
// 关闭两个流
streamWrite.Close();
}
catch (Exception ex)
{
throw new Exception("此处是上传方法:"+ex.Message + "ftp路径:" + uri);
}
}
Response.Write(l_notice);
}
fengniumaxi 2009-10-28
  • 打赏
  • 举报
回复
如果不想用我说的那个,那同样还可以使用FTP甚至其他协议,这个倒没任何问题啊。
fengniumaxi 2009-10-28
  • 打赏
  • 举报
回复
这和你是不是C/S没什么关系的啊,前提是你的局域网可以访问你的服务器,无论通过什么访问,至少网络是通的。至于你是用HTTP协议或者WS或者是SOCKET,这个只是个人喜好而已,别无其他。

如果没有web应用程序,不走HTTP,那也好办啊,走SOCKET(TCP/IP),同样可以解决的啊。

实在不明白,为什么很多人一说什么东西都先说自己是什么什么程序?如果你使用最原始的东西,无论什么表现形式都是可以实现的。
wuyq11 2009-10-28
  • 打赏
  • 举报
回复
还可使用webclient
System.Net.WebClient myWebClient = new System.Net.WebClient();
myWebClient.Headers.Add("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 2.0.50727;)");
myWebClient.UploadFile(webUrl, "POST", localFileName);

龙宜坡 2009-10-28
  • 打赏
  • 举报
回复
Tcp或Udp数据传送么?
wuyq11 2009-10-28
  • 打赏
  • 举报
回复
通过使用FTPwebrequest上传文件
或web services
private bool FtpUpFile(string strFileName,string strFtpUrl,string strFtpUser,string strFtpPassword)
{
try
{
FileInfo fileInf = new FileInfo(strFileName);
FtpWebRequest reqFTP;
reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(strFtpUrl + fileInf.Name));
reqFTP.Credentials = new NetworkCredential(strFtpUser, strFtpPassword);
reqFTP.KeepAlive = false;
reqFTP.Method = WebRequestMethods.Ftp.UploadFile;
reqFTP.UseBinary = true;
reqFTP.ContentLength = fileInf.Length;
int buffLength = 2048;
byte[] buff = new byte[buffLength];
int contentLen;
FileStream fs = fileInf.OpenRead();
Stream strm = reqFTP.GetRequestStream();
contentLen = fs.Read(buff, 0, buffLength);
int allbye = (int)fileInf.Length;
int startbye = 0;
while (contentLen != 0)
{
strm.Write(buff, 0, contentLen);
contentLen = fs.Read(buff, 0, buffLength);
startbye += contentLen;
}
strm.Close();
fs.Close();
return true;
}
catch
{
return false;
}


}
cstester 2009-10-28
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zhoufoxcn 的回复:]
首先必须上传的服务器支持文件共享或者Web共享,当然可以通过Web Service之类的方法来解决。
上传时将文件数据和文件名作为参数传过去,在目标服务器上保存这些数据;
获取的时候,将文件名作为参数穿过去,目标服务器将文件数据传过来。
[/Quote]

补充下。 我的就是C/S 存的。 用不了WS。
在有就是程序跑在局域网。 服务器就是开着机 啥也不干。 也没Web应用程序。 呵呵。
周公 2009-10-28
  • 打赏
  • 举报
回复
首先必须上传的服务器支持文件共享或者Web共享,当然可以通过Web Service之类的方法来解决。
上传时将文件数据和文件名作为参数传过去,在目标服务器上保存这些数据;
获取的时候,将文件名作为参数穿过去,目标服务器将文件数据传过来。
wartim 2009-10-28
  • 打赏
  • 举报
回复
嵌一个很小的webbrowse来获得和显示图片算了

110,530

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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