使用WebClient的uploadfile方法上传文件出现500错误

nthytozam 2007-12-20 12:06:33
源代码:
this.txtUploadFile.Text=this.openFileDialog1.FileName;
string filepath=this.txtUploadFile.Text.Trim();
string server="http://localhost/sheetNew"+Path.GetFileName(filepath);
WebClient client=new WebClient();
byte[] buff=client.UploadFile(server,"PUT",filepath);

总是出现远程服务器(500) 内部服务器错误
请高手指点
虚拟目录已经具有写入权限,操作系统Windows XP Professional
...全文
545 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
蒋晟 2010-12-18
  • 打赏
  • 举报
回复
500错误得看服务器端日志了解原因。
babyeudi 2010-12-18
  • 打赏
  • 举报
回复
第一 ,看看 文件上传限制 有多大。 第二, 如果限制已经足够大,那么可能是因为文件加载到缓存中,因为缓存不足,无法保留文件,提示 500 错误,解决方法,用8G 内存。。哈哈 就是因为内存不足引起的
nthytozam 2008-01-02
  • 打赏
  • 举报
回复
不行啊,我的是应用程序中使用webClient来上传,使用了,还是500错误
raul_qu 2007-12-22
  • 打赏
  • 举报
回复
UP
raul_qu 2007-12-21
  • 打赏
  • 举报
回复
网站根目录的文件夹安全属性中,配置相应的 Internet 来宾帐户权限为读取,排除其它的任何权限。当然,从提高安全性出发,这里不应该设置 EVERYONE 的相关权限,即删除 EVERYONE 组。

而相应需上传或者需要写入数据的文件夹,则给Internet 来宾帐户添加写入权限,如 uploadfile 目录一般要放置上传的文件,需要写入权限,data 目录中数据库文件也需要写入权限。
dh2087 2007-12-21
  • 打赏
  • 举报
回复
关注
快40的码农 2007-12-21
  • 打赏
  • 举报
回复
得保证uploadfile文件夹的写入权限中有asp.net用户.
大文件上传 断点上传 客户端 /// /// 服务器端地址,部署时为Web端的地址,可以用配置文件实现 /// public static string serverPath; /// /// 上传文件(按照文件名称上传,支持断点) /// /// 上传文件全路径 /// 上传时的流量控制,文件较大时,用于切割文件上传 /// 错误信息 /// 成功或者失败 public static bool UpLoadFile(string fileName, int byteCount,out string msg) { msg = ""; bool result = true; long cruuent = GetServerFileLength(fileName); FileStream fStream = new FileStream(fileName, FileMode.Open, FileAccess.Read); BinaryReader bReader = new BinaryReader(fStream); long length = fStream.Length; fileName = fileName.Substring(fileName.LastIndexOf('\\') + 1); #region 开始上传文件 try { #region 续传处理 byte[] data; if (cruuent > 0) { fStream.Seek(cruuent, SeekOrigin.Current); } #endregion #region 分割文件上传 for (; cruuent <= length; cruuent = cruuent + byteCount) { if (cruuent + byteCount > length) { data = new byte[Convert.ToInt64((length - cruuent))]; bReader.Read(data, 0, Convert.ToInt32((length - cruuent))); } else { data = new byte[byteCount]; bReader.Read(data, 0, byteCount); } try { Hashtable parms = new Hashtable(); parms.Add("fileName", fileName); parms.Add("npos", cruuent.ToString()); parms.Add("method", "SaveUpLoadFile"); byte[] byRemoteInfo = PostData(serverPath, data, parms); } catch (Exception ex) { msg = ex.ToString(); result = false; break; } #endregion } } catch (Exception ex) { throw ex; } finally { bReader.Close(); fStream.Close(); } GC.Collect(); #endregion return result; } /// /// 调用服务器端方法,或者服务器端,同名称的文件,已经上传的大小 /// /// 上传文件全路径 /// 服务器端文件的大小,如果以前没有上传过,则返回0 private static long GetServerFileLength(string fileName) { fileName = fileName.Substring(fileName.LastIndexOf('\\') + 1); Hashtable parms = new Hashtable(); parms.Add("fileName", fileName); parms.Add("method", "GetServerFileLength"); long length = 0; byte[] data = new byte[0]; byte[] byRemoteInfo = PostData(serverPath, data, parms); string sRemoteInfo = System.Text.Encoding.Default.GetString(byRemoteInfo); length = Convert.ToInt64(sRemoteInfo); return length; } /// /// 向服务器端提交数据 /// /// 服务器端地址 /// 要发送的数据 /// 附加参数,用URL的方式将此参数附件到地址中 /// 服务器端返回的 byte[] private static byte[] PostData(string serverURL, byte[] data, Hashtable parms) { System.Net.WebClient webClientObj = new System.Net.WebClient(); if (parms != null) { serverURL = serverURL + "?"; foreach (string key in parms.Keys) { serverURL = serverURL + key + "=" + parms[key].ToString() + "&"; } serverURL.TrimEnd('&'); } byte[] byRemoteInfo = webClientObj.UploadData(serverURL, "POST", data); return byRemoteInfo; } 接收端 /// /// 保存文件(从URL参数中获取文件名、当前指针,将文件流保存到当前指针后) /// 如果是第一次上传,则当前指针为0,代码执行与续传一样,只不过指针没有偏移 /// /// 文件名 /// 当前指针偏移 /// public int SaveUpLoadFile(string fileName, long npos) { int upLoadLength = Convert.ToInt32(HttpContext.Current.Request.InputStream.Length); string file = HttpContext.Current.Server.MapPath("/" + fileName); //string path = HttpContext.Current.Server.MapPath("/"); //fileName = path + "UpLoad\\" + fileName; FileStream fStream = new FileStream(file, FileMode.OpenOrCreate, FileAccess.ReadWrite); //偏移指针 fStream.Seek(npos, SeekOrigin.Begin); //从客户端的请求中获取文件流 BinaryReader bReader = new BinaryReader(HttpContext.Current.Request.InputStream); try { byte[] data = new byte[upLoadLength]; bReader.Read(data, 0, upLoadLength); fStream.Write(data, 0, upLoadLength); return 1; } catch { //TODO 添加异常处理 } finally { //释放流 fStream.Close(); bReader.Close(); } return -1; }

17,741

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 .NET Framework
社区管理员
  • .NET Framework社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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