发布到IIS后 WebClient.UploadFile 上传文件失败,返回错误码500

时间:2022-06-01 14:07:39
发布到IIS后 WebClient.UploadFile 上传文件失败,返回错误码500;在本机(或发布IIS的服务器机器)操作时,功能是好用的。 代码如下
 //获得要保存的文件路径
string serverFileName = path+file.Name;
//创建WebClient实例  
WebClient myWebClient = new WebClient();
//设定window网络安全认证  
myWebClient.Credentials = CredentialCache.DefaultCredentials;
myWebClient.UploadFile(serverFileName,"PUT",strFile);//strFile是要被上传的文件

21 个解决方案

#1


服务器有权限吗?

#2


strFile 是本地路径吧?iis上读不到
  
*****************************************************************************
签名档: http://feiyun0112.cnblogs.com/

#3


string serverFileName = path+file.Name;

你的path是怎么获取的?

#4


IIS的put默认的关闭的吧。

#5


引用 2 楼 feiyun0112 的回复:
strFile 是本地路径吧?iis上读不到
  
*****************************************************************************
签名档: http://feiyun0112.cnblogs.com/

strFile 是本地的,要从本地上传文件至服务器上,IIS读不到吗??那怎么做?我在服务器上用IP访问网站是能操作的

#6


引用 3 楼 xinguotiantian 的回复:
string serverFileName = path+file.Name;

你的path是怎么获取的?

path是从数据表里获取的,存储的路径,如 文件夹A/文件夹B/文件夹C/

#7


引用 4 楼 findcaiyzh 的回复:
IIS的put默认的关闭的吧。

这个设置好了,是开着的,我在服务器上操作就行的

#8


引用 7 楼 seeransky 的回复:
Quote: 引用 4 楼 findcaiyzh 的回复:

IIS的put默认的关闭的吧。

这个设置好了,是开着的,我在服务器上操作就行的


那就是权限了,服务器也在一个Domain里吗?

#9


引用 8 楼 findcaiyzh 的回复:
Quote: 引用 7 楼 seeransky 的回复:

Quote: 引用 4 楼 findcaiyzh 的回复:

IIS的put默认的关闭的吧。

这个设置好了,是开着的,我在服务器上操作就行的


那就是权限了,服务器也在一个Domain里吗?

权限也都设置了,Domain是什么?

#10


domain -- 域

#11


引用 6 楼 seeransky 的回复:
Quote: 引用 3 楼 xinguotiantian 的回复:

string serverFileName = path+file.Name;

你的path是怎么获取的?

path是从数据表里获取的,存储的路径,如 文件夹A/文件夹B/文件夹C/

将上传的文件夹权限设置为IIS来宾账户允许读写。在IIS服务器中网站下的主目录中设置
 
  

#12


引用 10 楼 findcaiyzh 的回复:
domain -- 域

都在局域网里的,能加你QQ不,我的Q是1043906142

#13


用FileUpload 控件上传

#14


 WebClient.UploadFile 你这是要把文件从哪传到哪?

#15


引用 12 楼 seeransky 的回复:
Quote: 引用 10 楼 findcaiyzh 的回复:

domain -- 域

都在局域网里的,能加你QQ不,我的Q是1043906142


不太用QQ。不好意思。

#16


引用 13 楼 feiyun0112 的回复:
用FileUpload 控件上传

由于要达到想要的效果,不能直接用FileUpload1.PostedFile.SaveAs方法

#17


引用 14 楼 yuwenge 的回复:
 WebClient.UploadFile 你这是要把文件从哪传到哪?

将本地文件上传到服务器上面的指定路径下面啊

#18


引用 17 楼 seeransky 的回复:
Quote: 引用 14 楼 yuwenge 的回复:

 WebClient.UploadFile 你这是要把文件从哪传到哪?

将本地文件上传到服务器上面的指定路径下面啊

那你用错东西了。
先了解清楚什么是本地,什么是服务器好了。

#19


引用 18 楼 yuwenge 的回复:
Quote: 引用 17 楼 seeransky 的回复:

Quote: 引用 14 楼 yuwenge 的回复:

 WebClient.UploadFile 你这是要把文件从哪传到哪?

将本地文件上传到服务器上面的指定路径下面啊

那你用错东西了。
先了解清楚什么是本地,什么是服务器好了。

嗯,我现在能将根目录下的文件上传到服务器,但是如果路径里有一层文件夹的话就不行,如:D:\11.txt可以成功上传到服务器上,但是D:\文件夹\11.txt的话就不行,提示未能找到路径“D:\文件夹\11.txt”的一部分

#20


引用 19 楼 seeransky 的回复:
Quote: 引用 18 楼 yuwenge 的回复:

Quote: 引用 17 楼 seeransky 的回复:

Quote: 引用 14 楼 yuwenge 的回复:

 WebClient.UploadFile 你这是要把文件从哪传到哪?

将本地文件上传到服务器上面的指定路径下面啊

那你用错东西了。
先了解清楚什么是本地,什么是服务器好了。

嗯,我现在能将根目录下的文件上传到服务器,但是如果路径里有一层文件夹的话就不行,如:D:\11.txt可以成功上传到服务器上,但是D:\文件夹\11.txt的话就不行,提示未能找到路径“D:\文件夹\11.txt”的一部分

你还是没搞懂什么是本地,什么是服务器。

#21


引用 20 楼 yuwenge 的回复:
Quote: 引用 19 楼 seeransky 的回复:

Quote: 引用 18 楼 yuwenge 的回复:

Quote: 引用 17 楼 seeransky 的回复:

Quote: 引用 14 楼 yuwenge 的回复:

 WebClient.UploadFile 你这是要把文件从哪传到哪?

将本地文件上传到服务器上面的指定路径下面啊

那你用错东西了。
先了解清楚什么是本地,什么是服务器好了。

嗯,我现在能将根目录下的文件上传到服务器,但是如果路径里有一层文件夹的话就不行,如:D:\11.txt可以成功上传到服务器上,但是D:\文件夹\11.txt的话就不行,提示未能找到路径“D:\文件夹\11.txt”的一部分

你还是没搞懂什么是本地,什么是服务器。

能说下吗?
Stream文件流上传 
FileStream文件上传用法:
FileStream fs = new FileStream(upFileName, FileMode.Open, FileAccess.Read, FileShare.Read);
BinaryReader bReader = new BinaryReader(fs);
byte[] postArray = bReader.ReadBytes((int)fs.Length);
Stream postStream = myWebClient.OpenWrite(saveFileName, "PUT");
if (postStream.CanWrite)
{ postStream.Write(postArray, 0, postArray.Length); }
postStream.Close();
当从客户端上传文件至服务器端时,会提示“未能找到路径的一部分”;
原因是,FileStream上传文件获取的文件路径是服务器端的路径,不能用于从客户端上传文件;FileStream多用于WinForm文件上传。
可以使用Stream代替FileStream类进行文件上传,

FileStream fs = new FileStream(upFileName, FileMode.Open, FileAccess.Read, FileShare.Read);
替换为
Stream fs = new StreamReader(upFileName);
Stream 允许远程数据流上传,本地到服务器,本地到本地都没有问题;FileStream 只支持本地数据流上传,所有会造成本地上传没有问题,到服务器时错误。
这是我从网上看到的,可是Stream fs = new StreamReader(upFileName);这行代码有问题,不知道该怎么改?能帮帮吗?非常感谢

#1


服务器有权限吗?

#2


strFile 是本地路径吧?iis上读不到
  
*****************************************************************************
签名档: http://feiyun0112.cnblogs.com/

#3


string serverFileName = path+file.Name;

你的path是怎么获取的?

#4


IIS的put默认的关闭的吧。

#5


引用 2 楼 feiyun0112 的回复:
strFile 是本地路径吧?iis上读不到
  
*****************************************************************************
签名档: http://feiyun0112.cnblogs.com/

strFile 是本地的,要从本地上传文件至服务器上,IIS读不到吗??那怎么做?我在服务器上用IP访问网站是能操作的

#6


引用 3 楼 xinguotiantian 的回复:
string serverFileName = path+file.Name;

你的path是怎么获取的?

path是从数据表里获取的,存储的路径,如 文件夹A/文件夹B/文件夹C/

#7


引用 4 楼 findcaiyzh 的回复:
IIS的put默认的关闭的吧。

这个设置好了,是开着的,我在服务器上操作就行的

#8


引用 7 楼 seeransky 的回复:
Quote: 引用 4 楼 findcaiyzh 的回复:

IIS的put默认的关闭的吧。

这个设置好了,是开着的,我在服务器上操作就行的


那就是权限了,服务器也在一个Domain里吗?

#9


引用 8 楼 findcaiyzh 的回复:
Quote: 引用 7 楼 seeransky 的回复:

Quote: 引用 4 楼 findcaiyzh 的回复:

IIS的put默认的关闭的吧。

这个设置好了,是开着的,我在服务器上操作就行的


那就是权限了,服务器也在一个Domain里吗?

权限也都设置了,Domain是什么?

#10


domain -- 域

#11


引用 6 楼 seeransky 的回复:
Quote: 引用 3 楼 xinguotiantian 的回复:

string serverFileName = path+file.Name;

你的path是怎么获取的?

path是从数据表里获取的,存储的路径,如 文件夹A/文件夹B/文件夹C/

将上传的文件夹权限设置为IIS来宾账户允许读写。在IIS服务器中网站下的主目录中设置
 
  

#12


引用 10 楼 findcaiyzh 的回复:
domain -- 域

都在局域网里的,能加你QQ不,我的Q是1043906142

#13


用FileUpload 控件上传

#14


 WebClient.UploadFile 你这是要把文件从哪传到哪?

#15


引用 12 楼 seeransky 的回复:
Quote: 引用 10 楼 findcaiyzh 的回复:

domain -- 域

都在局域网里的,能加你QQ不,我的Q是1043906142


不太用QQ。不好意思。

#16


引用 13 楼 feiyun0112 的回复:
用FileUpload 控件上传

由于要达到想要的效果,不能直接用FileUpload1.PostedFile.SaveAs方法

#17


引用 14 楼 yuwenge 的回复:
 WebClient.UploadFile 你这是要把文件从哪传到哪?

将本地文件上传到服务器上面的指定路径下面啊

#18


引用 17 楼 seeransky 的回复:
Quote: 引用 14 楼 yuwenge 的回复:

 WebClient.UploadFile 你这是要把文件从哪传到哪?

将本地文件上传到服务器上面的指定路径下面啊

那你用错东西了。
先了解清楚什么是本地,什么是服务器好了。

#19


引用 18 楼 yuwenge 的回复:
Quote: 引用 17 楼 seeransky 的回复:

Quote: 引用 14 楼 yuwenge 的回复:

 WebClient.UploadFile 你这是要把文件从哪传到哪?

将本地文件上传到服务器上面的指定路径下面啊

那你用错东西了。
先了解清楚什么是本地,什么是服务器好了。

嗯,我现在能将根目录下的文件上传到服务器,但是如果路径里有一层文件夹的话就不行,如:D:\11.txt可以成功上传到服务器上,但是D:\文件夹\11.txt的话就不行,提示未能找到路径“D:\文件夹\11.txt”的一部分

#20


引用 19 楼 seeransky 的回复:
Quote: 引用 18 楼 yuwenge 的回复:

Quote: 引用 17 楼 seeransky 的回复:

Quote: 引用 14 楼 yuwenge 的回复:

 WebClient.UploadFile 你这是要把文件从哪传到哪?

将本地文件上传到服务器上面的指定路径下面啊

那你用错东西了。
先了解清楚什么是本地,什么是服务器好了。

嗯,我现在能将根目录下的文件上传到服务器,但是如果路径里有一层文件夹的话就不行,如:D:\11.txt可以成功上传到服务器上,但是D:\文件夹\11.txt的话就不行,提示未能找到路径“D:\文件夹\11.txt”的一部分

你还是没搞懂什么是本地,什么是服务器。

#21


引用 20 楼 yuwenge 的回复:
Quote: 引用 19 楼 seeransky 的回复:

Quote: 引用 18 楼 yuwenge 的回复:

Quote: 引用 17 楼 seeransky 的回复:

Quote: 引用 14 楼 yuwenge 的回复:

 WebClient.UploadFile 你这是要把文件从哪传到哪?

将本地文件上传到服务器上面的指定路径下面啊

那你用错东西了。
先了解清楚什么是本地,什么是服务器好了。

嗯,我现在能将根目录下的文件上传到服务器,但是如果路径里有一层文件夹的话就不行,如:D:\11.txt可以成功上传到服务器上,但是D:\文件夹\11.txt的话就不行,提示未能找到路径“D:\文件夹\11.txt”的一部分

你还是没搞懂什么是本地,什么是服务器。

能说下吗?
Stream文件流上传 
FileStream文件上传用法:
FileStream fs = new FileStream(upFileName, FileMode.Open, FileAccess.Read, FileShare.Read);
BinaryReader bReader = new BinaryReader(fs);
byte[] postArray = bReader.ReadBytes((int)fs.Length);
Stream postStream = myWebClient.OpenWrite(saveFileName, "PUT");
if (postStream.CanWrite)
{ postStream.Write(postArray, 0, postArray.Length); }
postStream.Close();
当从客户端上传文件至服务器端时,会提示“未能找到路径的一部分”;
原因是,FileStream上传文件获取的文件路径是服务器端的路径,不能用于从客户端上传文件;FileStream多用于WinForm文件上传。
可以使用Stream代替FileStream类进行文件上传,

FileStream fs = new FileStream(upFileName, FileMode.Open, FileAccess.Read, FileShare.Read);
替换为
Stream fs = new StreamReader(upFileName);
Stream 允许远程数据流上传,本地到服务器,本地到本地都没有问题;FileStream 只支持本地数据流上传,所有会造成本地上传没有问题,到服务器时错误。
这是我从网上看到的,可是Stream fs = new StreamReader(upFileName);这行代码有问题,不知道该怎么改?能帮帮吗?非常感谢