把已知路径的本地文件(不通过浏览选择),上传到远程服务器

woyaodubo 2018-03-28 12:57:00
本地电脑没问题,上传到远程服务器就不行, 实在找不到办法了啊。


public void UploadFile()
{
//本地电脑文件路径
FileStream stream = new FileStream(@"C:\Users\li\Desktop\tb.txt", FileMode.Open, FileAccess.Read);
int size = Convert.ToInt32(stream.Length);
Byte[] bytes = new Byte[size];
stream.Read(bytes, 0, size);
stream.Close();
FileStream fos = null;

//上传到远程服务器
string filePath = Server.MapPath("~/DataFile/");
if (!Directory.Exists(filePath))
{
Directory.CreateDirectory(filePath);
}
string fileName = "111.txt";
fos = new FileStream(filePath + fileName, FileMode.OpenOrCreate, FileAccess.ReadWrite);
fos.Write(bytes, 0, bytes.Length);
fos.Close();
}

...全文
675 34 打赏 收藏 转发到动态 举报
写回复
用AI写文章
34 条回复
切换为时间正序
请发表友善的回复…
发表回复
wang_peng_yl 2018-04-02
  • 打赏
  • 举报
回复
你是没分清什么是客户端,什么是服务器端吧 C:\Users\li\Desktop\tb.txt"是客户端路径 string filePath = Server.MapPath("~/DataFile/");是服务器端路径,都不在一台电脑上 服务器端最起码要先接收你客户端的完整文件流,然后才是保存操作的, 即 fos = new FileStream(filePath + fileName, FileMode.OpenOrCreate, FileAccess.ReadWrite); fos.Write(bytes, 0, bytes.Length); fos.Close(); 但你前面代码的功能,好像不是接收服务器文件流的操作吧,更像是读服务器上本地文件的操作
wang_peng_yl 2018-04-02
  • 打赏
  • 举报
回复
改下 好像不是接收客户端文件流的操作吧,更像是读服务器上本地文件的操作
by_封爱 版主 2018-04-02
  • 打赏
  • 举报
回复
cs bs都分不清....
  • 打赏
  • 举报
回复
把已知路径的本地文件(不通过浏览选择),上传到远程服务器 据我所知,只有FTP方式可以,但要使用这种方式,需要远程服务器支持FTP
threenewbee 2018-03-29
  • 打赏
  • 举报
回复
搞清楚你贴的代码是干嘛的。 你的代码一些看上去是asp.net服务器端的,一些是winforms客户端的,你怎么混在一起了呢。 另外,相同的问题不要重复发,再发就要删除了。
bcuidenghong 2018-03-29
  • 打赏
  • 举报
回复
引用 23 楼 woyaodubo 的回复:
[quote=引用 22 楼 albb252 的回复:] [quote=引用 楼主 woyaodubo 的回复:] 本地电脑没问题,上传到远程服务器就不行, 实在找不到办法了啊。

        public void UploadFile()
        {
            //本地电脑文件路径
            FileStream stream = new FileStream(@"C:\Users\li\Desktop\tb.txt", FileMode.Open, FileAccess.Read);
            int size = Convert.ToInt32(stream.Length);
            Byte[] bytes = new Byte[size];
            stream.Read(bytes, 0, size);
            stream.Close();
            FileStream fos = null;

            //上传到远程服务器
            string filePath = Server.MapPath("~/DataFile/");
            if (!Directory.Exists(filePath))
            {
                Directory.CreateDirectory(filePath);
            }
            string fileName = "111.txt";
            fos = new FileStream(filePath + fileName, FileMode.OpenOrCreate, FileAccess.ReadWrite);
            fos.Write(bytes, 0, bytes.Length);
            fos.Close();
        }
你这个需求只能用控件来实现,B/S是无法实现的,因为B/S没有提供这种接口。你可以在网上找下这种控件,我记得网上有的。[/quote] 什么控件我想要[/quote]这类需求还是挻多的,在这里推荐一个 Web小文件上传控件:http://www.cnblogs.com/xproer/archive/2010/10/24/1859895.html 此控件是基于标准HTTP协议实现的文件上传功能。优势是扩展性非常好,整合简单,支持批量上传文件和上传文件夹功能,上传前获取本地文件大小,适合各种简单WEB项目。 自定义上传文件路径 自定义选择文件路径: 多线程上传: 上传本地文件代码 使用步骤如下: 1.调用addFile函数添加本地文件,注意路径需要使用双斜框(\\) 2.调用postAll函数开始上传文件。

<div id="divUpload"></div>
	<script type="text/javascript" language="javascript">
        var fileMgr = new HttpUploaderMgr();
        fileMgr.Config["PostUrl"] = "http://localhost:4854/asp.net/upload.aspx";

        $(function ()
        {
            fileMgr.loadTo("divUpload");
            $("#btnPost").click(function ()
            {
                fileMgr.postAll();
            });

            //上传本地文件
            $("#btnPostLoc").click(function ()
            {
                fileMgr.app.addFile({ path: "D:\\QQ2013.exe" } );
            });
        });
	</script>
单文件整合代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>单文件上传示例</title>
    <link href="js/up2.css" type="text/css" rel="Stylesheet"/>
    <script src="js/jquery-1.3.2.min.js" type="text/javascript"></script>
    <script src="js/json2.min.js" type="text/javascript" charset="utf-8"></script>
    <script src="js/up2-single.js" type="text/javascript" charset="utf-8"></script>
    <script language="javascript" type="text/javascript">
        var fileMgr = new HttpUploaderMgr();

        fileMgr.event.postComplete = function (obj) { };
        fileMgr.event.postError = function (obj) { };
        fileMgr.event.postProcess = function (obj, speed, postedLength, percent, times) { };

        $(document).ready(function ()
        {
            fileMgr.loadAuto();

            //上传用户选择的文件
            $("#btnSel").click(function ()
            {
                fileMgr.postAuto("upPnl"); //
            });

            //上传指定路径中的文件
            $("#btnPostLoc").click(function ()
            {
                fileMgr.postLoc("D:\\360safe-inst.exe", "upPnl"); //
            });
        });
    </script>
</head>
<body>
    <p>此页面演示单个文件上传样式</p>
    <div id="upPnl"></div>
    <input id="btnSel" type="button" value="浏览" />
    <input id="btnPostLoc" type="button" value="上传本地文件" />
</body>
</html>
示例下载: exe安装包 cab安装包(x86) cab安装包(x64) 开发文档 ASP示例 ASP.NET示例 JSP示例 PHP示例
activexme 2018-03-29
  • 打赏
  • 举报
回复
引用 23 楼 woyaodubo 的回复:
[quote=引用 22 楼 albb252 的回复:]
[quote=引用 楼主 woyaodubo 的回复:]
本地电脑没问题,上传到远程服务器就不行, 实在找不到办法了啊。


public void UploadFile()
{
//本地电脑文件路径
FileStream stream = new FileStream(@"C:\Users\li\Desktop\tb.txt", FileMode.Open, FileAccess.Read);
int size = Convert.ToInt32(stream.Length);
Byte[] bytes = new Byte[size];
stream.Read(bytes, 0, size);
stream.Close();
FileStream fos = null;

//上传到远程服务器
string filePath = Server.MapPath("~/DataFile/");
if (!Directory.Exists(filePath))
{
Directory.CreateDirectory(filePath);
}
string fileName = "111.txt";
fos = new FileStream(filePath + fileName, FileMode.OpenOrCreate, FileAccess.ReadWrite);
fos.Write(bytes, 0, bytes.Length);
fos.Close();
}
你这个需求只能用控件来实现,B/S是无法实现的,因为B/S没有提供这种接口。你可以在网上找下这种控件,我记得网上有的。[/quote]


什么控件我想要[/quote]我截个图你看下是不是说的这种功能。

输入自定义的文件路径:


添加文件后:


点击上传:
jzhswsw 2018-03-29
  • 打赏
  • 举报
回复
要不然你试试 在远程服务器目标位置变成共享文件夹 然后往共享文件夹复制
woyaodubo 2018-03-29
  • 打赏
  • 举报
回复
引用 27 楼 bcuidenghong 的回复:
[quote=引用 23 楼 woyaodubo 的回复:] [quote=引用 22 楼 albb252 的回复:] [quote=引用 楼主 woyaodubo 的回复:] 本地电脑没问题,上传到远程服务器就不行, 实在找不到办法了啊。

        public void UploadFile()
        {
            //本地电脑文件路径
            FileStream stream = new FileStream(@"C:\Users\li\Desktop\tb.txt", FileMode.Open, FileAccess.Read);
            int size = Convert.ToInt32(stream.Length);
            Byte[] bytes = new Byte[size];
            stream.Read(bytes, 0, size);
            stream.Close();
            FileStream fos = null;

            //上传到远程服务器
            string filePath = Server.MapPath("~/DataFile/");
            if (!Directory.Exists(filePath))
            {
                Directory.CreateDirectory(filePath);
            }
            string fileName = "111.txt";
            fos = new FileStream(filePath + fileName, FileMode.OpenOrCreate, FileAccess.ReadWrite);
            fos.Write(bytes, 0, bytes.Length);
            fos.Close();
        }
你这个需求只能用控件来实现,B/S是无法实现的,因为B/S没有提供这种接口。你可以在网上找下这种控件,我记得网上有的。[/quote] 什么控件我想要[/quote]这类需求还是挻多的,在这里推荐一个 Web小文件上传控件:http://www.cnblogs.com/xproer/archive/2010/10/24/1859895.html 此控件是基于标准HTTP协议实现的文件上传功能。优势是扩展性非常好,整合简单,支持批量上传文件和上传文件夹功能,上传前获取本地文件大小,适合各种简单WEB项目。 自定义上传文件路径 自定义选择文件路径: 多线程上传: 上传本地文件代码 使用步骤如下: 1.调用addFile函数添加本地文件,注意路径需要使用双斜框(\\) 2.调用postAll函数开始上传文件。

<div id="divUpload"></div>
	<script type="text/javascript" language="javascript">
        var fileMgr = new HttpUploaderMgr();
        fileMgr.Config["PostUrl"] = "http://localhost:4854/asp.net/upload.aspx";

        $(function ()
        {
            fileMgr.loadTo("divUpload");
            $("#btnPost").click(function ()
            {
                fileMgr.postAll();
            });

            //上传本地文件
            $("#btnPostLoc").click(function ()
            {
                fileMgr.app.addFile({ path: "D:\\QQ2013.exe" } );
            });
        });
	</script>
单文件整合代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>单文件上传示例</title>
    <link href="js/up2.css" type="text/css" rel="Stylesheet"/>
    <script src="js/jquery-1.3.2.min.js" type="text/javascript"></script>
    <script src="js/json2.min.js" type="text/javascript" charset="utf-8"></script>
    <script src="js/up2-single.js" type="text/javascript" charset="utf-8"></script>
    <script language="javascript" type="text/javascript">
        var fileMgr = new HttpUploaderMgr();

        fileMgr.event.postComplete = function (obj) { };
        fileMgr.event.postError = function (obj) { };
        fileMgr.event.postProcess = function (obj, speed, postedLength, percent, times) { };

        $(document).ready(function ()
        {
            fileMgr.loadAuto();

            //上传用户选择的文件
            $("#btnSel").click(function ()
            {
                fileMgr.postAuto("upPnl"); //
            });

            //上传指定路径中的文件
            $("#btnPostLoc").click(function ()
            {
                fileMgr.postLoc("D:\\360safe-inst.exe", "upPnl"); //
            });
        });
    </script>
</head>
<body>
    <p>此页面演示单个文件上传样式</p>
    <div id="upPnl"></div>
    <input id="btnSel" type="button" value="浏览" />
    <input id="btnPostLoc" type="button" value="上传本地文件" />
</body>
</html>
示例下载: exe安装包 cab安装包(x86) cab安装包(x64) 开发文档 ASP示例 ASP.NET示例 JSP示例 PHP示例 [/quote] 晚上我下载来试试,不行再说
woyaodubo 2018-03-29
  • 打赏
  • 举报
回复
引用 26 楼 activexme 的回复:
[quote=引用 23 楼 woyaodubo 的回复:] [quote=引用 22 楼 albb252 的回复:] [quote=引用 楼主 woyaodubo 的回复:] 本地电脑没问题,上传到远程服务器就不行, 实在找不到办法了啊。

        public void UploadFile()
        {
            //本地电脑文件路径
            FileStream stream = new FileStream(@"C:\Users\li\Desktop\tb.txt", FileMode.Open, FileAccess.Read);
            int size = Convert.ToInt32(stream.Length);
            Byte[] bytes = new Byte[size];
            stream.Read(bytes, 0, size);
            stream.Close();
            FileStream fos = null;

            //上传到远程服务器
            string filePath = Server.MapPath("~/DataFile/");
            if (!Directory.Exists(filePath))
            {
                Directory.CreateDirectory(filePath);
            }
            string fileName = "111.txt";
            fos = new FileStream(filePath + fileName, FileMode.OpenOrCreate, FileAccess.ReadWrite);
            fos.Write(bytes, 0, bytes.Length);
            fos.Close();
        }
你这个需求只能用控件来实现,B/S是无法实现的,因为B/S没有提供这种接口。你可以在网上找下这种控件,我记得网上有的。[/quote] 什么控件我想要[/quote]我截个图你看下是不是说的这种功能。 输入自定义的文件路径: 添加文件后: 点击上传: [/quote] 差不多是这样,但是我是asp.net,不是winform,能实现吗?
  • 打赏
  • 举报
回复
比如说,在 c# 代码中写
            var web = new WebClient();
            web.UploadFile("http://localhost:1234/mysite/xxxx.aspx", "c:\\abc\1.txt");
这可以一目了然地是知道,是”传“文件了。虽然还是自己传给自己,但是这就具有技术深度、真正适配的”传“这个字眼儿。 所以我就是这个意思,用字眼儿的方式不同,背后是动手进行技术测试的出发点和测试标准确实不同。
xuzuning 2018-03-28
  • 打赏
  • 举报
回复
当然也可以用移动存储器来搬运
xuzuning 2018-03-28
  • 打赏
  • 举报
回复
是的,文件只能在文件系统中的一处复制(移动)到另一处 跨越文件系统就需要通过网络通讯机制来实现文件的迁移
woyaodubo 2018-03-28
  • 打赏
  • 举报
回复
引用 9 楼 sp1234 的回复:
查看是不是“上传”要拿出一个 http 调试器来调试 http 消息,诸如此类的具有行动力的做法。 假设你把本地文件拷贝说成是”服务器一个地方传到服务器另外一个地方“,你说这叫做”传“么?这其实在你来说也许叫做传,但是在我看来,要以动手测试为技术判断,而不是文字游戏来解释技术,这样就只能说这不叫做”传“。
这个东西一定要弄,截图得到的BitMap直接传到服务器上,不用再浏览选择图片。
  • 打赏
  • 举报
回复
引用 5 楼 woyaodubo 的回复:
就是说只能从服务器一个地方传到服务器另外一个地方了?
这个就不用抠字眼儿了,重点是理解。 这个时候就根本无所谓“传”了,你的c#程序可以读取一个目录下的文件,然后找到当前网站的目录,把文件内容复制到这个目标目录下,这其实就只是文件拷贝。这个程序并没有任何“上传”的概念。一般所说的 web 文件上传这个概念是经过了 http 的 RFC1867协议等等规定,也就是说你总是能看到类似 enctype= multipart/form-data 这类 html 属性说明符号,等等,总之是调试的时候才知有没有技术。将来你区分标题党和实际开发人员的最关键地指标,不是靠文字理解,而是靠自己动手调试。
  • 打赏
  • 举报
回复
查看是不是“上传”要拿出一个 http 调试器来调试 http 消息,诸如此类的具有行动力的做法。 假设你把本地文件拷贝说成是”服务器一个地方传到服务器另外一个地方“,你说这叫做”传“么?这其实在你来说也许叫做传,但是在我看来,要以动手测试为技术判断,而不是文字游戏来解释技术,这样就只能说这不叫做”传“。
woyaodubo 2018-03-28
  • 打赏
  • 举报
回复
引用 2 楼 zpc38368330 的回复:
filePath + fileName,在确认下这个 filePath和filename中间是否有"\\"分割,这种错误我常犯
本地测试都没事的。 就是传服务器上不行啊。
woyaodubo 2018-03-28
  • 打赏
  • 举报
回复
引用 3 楼 sp1234 的回复:
“已知路径的本地文件”? 这个是无根据的。c# 代码只能运行在服务器上,你难道能让这些运行在浏览器上吗?
那文件是怎么上传的? 就是说只能从服务器一个地方传到服务器另外一个地方了?
  • 打赏
  • 举报
回复
你的代码,是跑在服务器上的。 文件是怎么上传的?这你学习 asp.net 服务器端接收上传文件的 demo 就可以了。浏览器负责文件上传,浏览器支持 html 的
<input type=file .....>
这类标签,总之是有它的原则、规矩、出处、承载的客户端软件。你设计的程序不在这个范围内,所以白费了许多精力而并不在正确的设计范围内。
  • 打赏
  • 举报
回复
不论是你的“C:\Users\li\Des......”还是你的“~/DataF”,都是服务器上的。别把这个搞错了!
加载更多回复(13)

110,536

社区成员

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

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

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