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

时间:2022-10-15 13:37:14
本地电脑没问题,上传到远程服务器就不行, 实在找不到办法了啊。


        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();
        }

34 个解决方案

#1


 string filePath = Server.MapPath("~/DataFile/");
在上面这句打断点,看下filePath的值,并把它复制到资源管理器的地址栏中,看能不能打开,如果能打开再随便复制个文件进去,测试下是否权限不够.

#2


filePath + fileName,在确认下这个 filePath和filename中间是否有"\\"分割,这种错误我常犯 把已知路径的本地文件(不通过浏览选择),上传到远程服务器

#3


“已知路径的本地文件”?

这个是无根据的。c# 代码只能运行在服务器上,你难道能让这些运行在浏览器上吗?

#4


不论是你的“C:\Users\li\Des......”还是你的“~/DataF”,都是服务器上的。别把这个搞错了!

#5


引用 3 楼 sp1234 的回复:
“已知路径的本地文件”?

这个是无根据的。c# 代码只能运行在服务器上,你难道能让这些运行在浏览器上吗?


那文件是怎么上传的? 就是说只能从服务器一个地方传到服务器另外一个地方了?

#6


你的代码,是跑在服务器上的。

文件是怎么上传的?这你学习 asp.net 服务器端接收上传文件的 demo 就可以了。浏览器负责文件上传,浏览器支持 html 的 
<input type=file .....>
这类标签,总之是有它的原则、规矩、出处、承载的客户端软件。你设计的程序不在这个范围内,所以白费了许多精力而并不在正确的设计范围内。

#7


引用 2 楼 zpc38368330 的回复:
filePath + fileName,在确认下这个 filePath和filename中间是否有"\\"分割,这种错误我常犯 把已知路径的本地文件(不通过浏览选择),上传到远程服务器


本地测试都没事的。
就是传服务器上不行啊。

#8


引用 5 楼 woyaodubo 的回复:
 就是说只能从服务器一个地方传到服务器另外一个地方了?


这个就不用抠字眼儿了,重点是理解。

这个时候就根本无所谓“传”了,你的c#程序可以读取一个目录下的文件,然后找到当前网站的目录,把文件内容复制到这个目标目录下,这其实就只是文件拷贝。这个程序并没有任何“上传”的概念。一般所说的 web 文件上传这个概念是经过了 http 的 RFC1867协议等等规定,也就是说你总是能看到类似 enctype= multipart/form-data 这类 html 属性说明符号,等等,总之是调试的时候才知有没有技术。将来你区分标题党和实际开发人员的最关键地指标,不是靠文字理解,而是靠自己动手调试。

#9


查看是不是“上传”要拿出一个 http 调试器来调试 http 消息,诸如此类的具有行动力的做法。

假设你把本地文件拷贝说成是”服务器一个地方传到服务器另外一个地方“,你说这叫做”传“么?这其实在你来说也许叫做传,但是在我看来,要以动手测试为技术判断,而不是文字游戏来解释技术,这样就只能说这不叫做”传“。

#10


引用 9 楼 sp1234 的回复:
查看是不是“上传”要拿出一个 http 调试器来调试 http 消息,诸如此类的具有行动力的做法。

假设你把本地文件拷贝说成是”服务器一个地方传到服务器另外一个地方“,你说这叫做”传“么?这其实在你来说也许叫做传,但是在我看来,要以动手测试为技术判断,而不是文字游戏来解释技术,这样就只能说这不叫做”传“。


这个东西一定要弄,截图得到的BitMap直接传到服务器上,不用再浏览选择图片。

#11


是的,文件只能在文件系统中的一处复制(移动)到另一处
跨越文件系统就需要通过网络通讯机制来实现文件的迁移

#12


当然也可以用移动存储器来搬运

#13


比如说,在 c# 代码中写 
            var web = new WebClient();
            web.UploadFile("http://localhost:1234/mysite/xxxx.aspx", "c:\\abc\1.txt");

这可以一目了然地是知道,是”传“文件了。虽然还是自己传给自己,但是这就具有技术深度、真正适配的”传“这个字眼儿。

所以我就是这个意思,用字眼儿的方式不同,背后是动手进行技术测试的出发点和测试标准确实不同。

#14


引用 12 楼 xuzuning 的回复:
当然也可以用移动存储器来搬运


看了是要放弃了,先把图片保存在本地电脑,然后模拟选择到FileUpload,行不行?

#15


引用 13 楼 sp1234 的回复:
比如说,在 c# 代码中写 
            var web = new WebClient();
            web.UploadFile("http://localhost:1234/mysite/xxxx.aspx", "c:\\abc\1.txt");

这可以一目了然地是知道,是”传“文件了。虽然还是自己传给自己,但是这就具有技术深度、真正适配的”传“这个字眼儿。

所以我就是这个意思,用字眼儿的方式不同,背后是动手进行技术测试的出发点和测试标准确实不同。



了解了。

那换一种方法,能不能模拟选择文件到FileUpload ?

#16


引用 13 楼 sp1234 的回复:
比如说,在 c# 代码中写 
            var web = new WebClient();
            web.UploadFile("http://localhost:1234/mysite/xxxx.aspx", "c:\\abc\1.txt");

这可以一目了然地是知道,是”传“文件了。虽然还是自己传给自己,但是这就具有技术深度、真正适配的”传“这个字眼儿。

所以我就是这个意思,用字眼儿的方式不同,背后是动手进行技术测试的出发点和测试标准确实不同。



不用鼠标浏览选择文件,用程序模拟选择给FileUpload, 这样行不行?

#17


web.UploadFile("http://localhost:1234/mysite/xxxx.aspx",  "c:\\abc\1.txt");
中 "c:\\abc\1.txt" 是字符串,你可以写成常量,也可以使用变量

#18


没看到上传文件的代码,只是文件流保存本地磁盘的文件而已。C#上传文件可以通过WebClient、HttpWebRequest或者FTP方式上传,上传时读取本地路径for循环上传即可。

#19


引用 17 楼 xuzuning 的回复:
web.UploadFile("http://localhost:1234/mysite/xxxx.aspx",  "c:\\abc\1.txt");
中 "c:\\abc\1.txt" 是字符串,你可以写成常量,也可以使用变量


前面的http://localhost:1234/mysite/xxxx.aspx 是做什么用的?

#20


引用 18 楼 guwei4037 的回复:
没看到上传文件的代码,只是文件流保存本地磁盘的文件而已。C#上传文件可以通过WebClient、HttpWebRequest或者FTP方式上传,上传时读取本地路径for循环上传即可。


啊啊,麻烦

#21


b/s系统没有办法,只能由用户通过file来选择。你本机当然么有问题,问题是客户使用时有没有c盘是一回事

#22


引用 楼主 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没有提供这种接口。你可以在网上找下这种控件,我记得网上有的。

#23


引用 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没有提供这种接口。你可以在网上找下这种控件,我记得网上有的。



什么控件我想要

#24


该回复于2018-03-29 00:12:08被版主删除

#25


搞清楚你贴的代码是干嘛的。
你的代码一些看上去是asp.net服务器端的,一些是winforms客户端的,你怎么混在一起了呢。

另外,相同的问题不要重复发,再发就要删除了。

#26


引用 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没有提供这种接口。你可以在网上找下这种控件,我记得网上有的。



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

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

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

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

#27


引用 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没有提供这种接口。你可以在网上找下这种控件,我记得网上有的。



什么控件我想要
这类需求还是挻多的,在这里推荐一个
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示例

#28


引用 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没有提供这种接口。你可以在网上找下这种控件,我记得网上有的。



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

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

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

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

差不多是这样,但是我是asp.net,不是winform,能实现吗?

#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没有提供这种接口。你可以在网上找下这种控件,我记得网上有的。



什么控件我想要
这类需求还是挻多的,在这里推荐一个
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示例



晚上我下载来试试,不行再说 把已知路径的本地文件(不通过浏览选择),上传到远程服务器

#30


要不然你试试 在远程服务器目标位置变成共享文件夹 然后往共享文件夹复制 

#31


把已知路径的本地文件(不通过浏览选择),上传到远程服务器
据我所知,只有FTP方式可以,但要使用这种方式,需要远程服务器支持FTP

#32


cs bs都分不清....

#33


你是没分清什么是客户端,什么是服务器端吧

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();
但你前面代码的功能,好像不是接收服务器文件流的操作吧,更像是读服务器上本地文件的操作


#34


改下 好像不是接收客户端文件流的操作吧,更像是读服务器上本地文件的操作

#1


 string filePath = Server.MapPath("~/DataFile/");
在上面这句打断点,看下filePath的值,并把它复制到资源管理器的地址栏中,看能不能打开,如果能打开再随便复制个文件进去,测试下是否权限不够.

#2


filePath + fileName,在确认下这个 filePath和filename中间是否有"\\"分割,这种错误我常犯 把已知路径的本地文件(不通过浏览选择),上传到远程服务器

#3


“已知路径的本地文件”?

这个是无根据的。c# 代码只能运行在服务器上,你难道能让这些运行在浏览器上吗?

#4


不论是你的“C:\Users\li\Des......”还是你的“~/DataF”,都是服务器上的。别把这个搞错了!

#5


引用 3 楼 sp1234 的回复:
“已知路径的本地文件”?

这个是无根据的。c# 代码只能运行在服务器上,你难道能让这些运行在浏览器上吗?


那文件是怎么上传的? 就是说只能从服务器一个地方传到服务器另外一个地方了?

#6


你的代码,是跑在服务器上的。

文件是怎么上传的?这你学习 asp.net 服务器端接收上传文件的 demo 就可以了。浏览器负责文件上传,浏览器支持 html 的 
<input type=file .....>
这类标签,总之是有它的原则、规矩、出处、承载的客户端软件。你设计的程序不在这个范围内,所以白费了许多精力而并不在正确的设计范围内。

#7


引用 2 楼 zpc38368330 的回复:
filePath + fileName,在确认下这个 filePath和filename中间是否有"\\"分割,这种错误我常犯 把已知路径的本地文件(不通过浏览选择),上传到远程服务器


本地测试都没事的。
就是传服务器上不行啊。

#8


引用 5 楼 woyaodubo 的回复:
 就是说只能从服务器一个地方传到服务器另外一个地方了?


这个就不用抠字眼儿了,重点是理解。

这个时候就根本无所谓“传”了,你的c#程序可以读取一个目录下的文件,然后找到当前网站的目录,把文件内容复制到这个目标目录下,这其实就只是文件拷贝。这个程序并没有任何“上传”的概念。一般所说的 web 文件上传这个概念是经过了 http 的 RFC1867协议等等规定,也就是说你总是能看到类似 enctype= multipart/form-data 这类 html 属性说明符号,等等,总之是调试的时候才知有没有技术。将来你区分标题党和实际开发人员的最关键地指标,不是靠文字理解,而是靠自己动手调试。

#9


查看是不是“上传”要拿出一个 http 调试器来调试 http 消息,诸如此类的具有行动力的做法。

假设你把本地文件拷贝说成是”服务器一个地方传到服务器另外一个地方“,你说这叫做”传“么?这其实在你来说也许叫做传,但是在我看来,要以动手测试为技术判断,而不是文字游戏来解释技术,这样就只能说这不叫做”传“。

#10


引用 9 楼 sp1234 的回复:
查看是不是“上传”要拿出一个 http 调试器来调试 http 消息,诸如此类的具有行动力的做法。

假设你把本地文件拷贝说成是”服务器一个地方传到服务器另外一个地方“,你说这叫做”传“么?这其实在你来说也许叫做传,但是在我看来,要以动手测试为技术判断,而不是文字游戏来解释技术,这样就只能说这不叫做”传“。


这个东西一定要弄,截图得到的BitMap直接传到服务器上,不用再浏览选择图片。

#11


是的,文件只能在文件系统中的一处复制(移动)到另一处
跨越文件系统就需要通过网络通讯机制来实现文件的迁移

#12


当然也可以用移动存储器来搬运

#13


比如说,在 c# 代码中写 
            var web = new WebClient();
            web.UploadFile("http://localhost:1234/mysite/xxxx.aspx", "c:\\abc\1.txt");

这可以一目了然地是知道,是”传“文件了。虽然还是自己传给自己,但是这就具有技术深度、真正适配的”传“这个字眼儿。

所以我就是这个意思,用字眼儿的方式不同,背后是动手进行技术测试的出发点和测试标准确实不同。

#14


引用 12 楼 xuzuning 的回复:
当然也可以用移动存储器来搬运


看了是要放弃了,先把图片保存在本地电脑,然后模拟选择到FileUpload,行不行?

#15


引用 13 楼 sp1234 的回复:
比如说,在 c# 代码中写 
            var web = new WebClient();
            web.UploadFile("http://localhost:1234/mysite/xxxx.aspx", "c:\\abc\1.txt");

这可以一目了然地是知道,是”传“文件了。虽然还是自己传给自己,但是这就具有技术深度、真正适配的”传“这个字眼儿。

所以我就是这个意思,用字眼儿的方式不同,背后是动手进行技术测试的出发点和测试标准确实不同。



了解了。

那换一种方法,能不能模拟选择文件到FileUpload ?

#16


引用 13 楼 sp1234 的回复:
比如说,在 c# 代码中写 
            var web = new WebClient();
            web.UploadFile("http://localhost:1234/mysite/xxxx.aspx", "c:\\abc\1.txt");

这可以一目了然地是知道,是”传“文件了。虽然还是自己传给自己,但是这就具有技术深度、真正适配的”传“这个字眼儿。

所以我就是这个意思,用字眼儿的方式不同,背后是动手进行技术测试的出发点和测试标准确实不同。



不用鼠标浏览选择文件,用程序模拟选择给FileUpload, 这样行不行?

#17


web.UploadFile("http://localhost:1234/mysite/xxxx.aspx",  "c:\\abc\1.txt");
中 "c:\\abc\1.txt" 是字符串,你可以写成常量,也可以使用变量

#18


没看到上传文件的代码,只是文件流保存本地磁盘的文件而已。C#上传文件可以通过WebClient、HttpWebRequest或者FTP方式上传,上传时读取本地路径for循环上传即可。

#19


引用 17 楼 xuzuning 的回复:
web.UploadFile("http://localhost:1234/mysite/xxxx.aspx",  "c:\\abc\1.txt");
中 "c:\\abc\1.txt" 是字符串,你可以写成常量,也可以使用变量


前面的http://localhost:1234/mysite/xxxx.aspx 是做什么用的?

#20


引用 18 楼 guwei4037 的回复:
没看到上传文件的代码,只是文件流保存本地磁盘的文件而已。C#上传文件可以通过WebClient、HttpWebRequest或者FTP方式上传,上传时读取本地路径for循环上传即可。


啊啊,麻烦

#21


b/s系统没有办法,只能由用户通过file来选择。你本机当然么有问题,问题是客户使用时有没有c盘是一回事

#22


引用 楼主 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没有提供这种接口。你可以在网上找下这种控件,我记得网上有的。

#23


引用 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没有提供这种接口。你可以在网上找下这种控件,我记得网上有的。



什么控件我想要

#24


该回复于2018-03-29 00:12:08被版主删除

#25


搞清楚你贴的代码是干嘛的。
你的代码一些看上去是asp.net服务器端的,一些是winforms客户端的,你怎么混在一起了呢。

另外,相同的问题不要重复发,再发就要删除了。

#26


引用 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没有提供这种接口。你可以在网上找下这种控件,我记得网上有的。



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

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

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

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

#27


引用 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没有提供这种接口。你可以在网上找下这种控件,我记得网上有的。



什么控件我想要
这类需求还是挻多的,在这里推荐一个
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示例

#28


引用 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没有提供这种接口。你可以在网上找下这种控件,我记得网上有的。



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

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

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

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

差不多是这样,但是我是asp.net,不是winform,能实现吗?

#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没有提供这种接口。你可以在网上找下这种控件,我记得网上有的。



什么控件我想要
这类需求还是挻多的,在这里推荐一个
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示例



晚上我下载来试试,不行再说 把已知路径的本地文件(不通过浏览选择),上传到远程服务器

#30


要不然你试试 在远程服务器目标位置变成共享文件夹 然后往共享文件夹复制 

#31


把已知路径的本地文件(不通过浏览选择),上传到远程服务器
据我所知,只有FTP方式可以,但要使用这种方式,需要远程服务器支持FTP

#32


cs bs都分不清....

#33


你是没分清什么是客户端,什么是服务器端吧

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();
但你前面代码的功能,好像不是接收服务器文件流的操作吧,更像是读服务器上本地文件的操作


#34


改下 好像不是接收客户端文件流的操作吧,更像是读服务器上本地文件的操作