【大牛看看】WebClient uploafile上传文件问题

R_zhanche 2013-12-31 08:29:03
  WebClient webClient = new WebClient();


使用WebClient uploafile在客户端向服务器端上传文件,到底WebClient这个类需不需要服务端接受页面啊?

比如这样的

 Uri u = new Uri("http://local.com/uploadfile");


就直接写入到local.com网站下的uploadfile文件夹下
...全文
316 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
R_zhanche 2014-01-03
  • 打赏
  • 举报
回复
引用 13 楼 guwei4037 的回复:
我不会睁着眼睛说瞎话的,之所以我这样说,是因为我实际项目中使用过,也才“敢”回复你的问题。
不是说瞎话,我还是不能实现 上传到指定任意目录。
全栈极简 2014-01-03
  • 打赏
  • 举报
回复
我不会睁着眼睛说瞎话的,之所以我这样说,是因为我实际项目中使用过,也才“敢”回复你的问题。
R_zhanche 2014-01-03
  • 打赏
  • 举报
回复
引用 4 楼 guwei4037 的回复:
WebClient.UploadFile(uriString,"PUT",fileNamePath); try...
引用 2 楼 guwei4037 的回复:
不需要,可以直接上传到指定目录下。
我自己测试总结,还是有一个服务端接收页面比较好。【不需要,可以直接上传到指定目录下】这句话似乎是错误的
R_zhanche 2014-01-02
  • 打赏
  • 举报
回复
顶起来
引用 2 楼 guwei4037 的回复:
不需要,可以直接上传到指定目录下。
  • 打赏
  • 举报
回复
其实解决问题,不在于你多么“省力”,而在于找你有把握做好的方法、避免找成事不足败事有余的借口去瞎试。
  • 打赏
  • 举报
回复
引用 6 楼 R_zhanche 的回复:
[quote=引用 5 楼 sp1234 的回复:] [quote=引用 3 楼 R_zhanche 的回复:] 我测试哪个都不对啊,按理说默认是使用post方法,但是却会提示【远程服务器返回错误: (405) 不允许的方法】
写一个服务器端接受页面(推荐ashx),并且调试。贴出你的调试画面。[/quote] 不是不需要接受页面吗[/quote] 你写一个6、7行代码的接受页面,不就就能方便自己调试了嘛。
R_zhanche 2013-12-31
  • 打赏
  • 举报
回复
引用 4 楼 guwei4037 的回复:
WebClient.UploadFile(uriString,"PUT",fileNamePath); try...
直接使用put还不行 我已经开启了webdav服务模块,在IIS7的处理程序映射中搞不清 该设置哪个请求限制 允许put操作。 还有没有其他限制?
R_zhanche 2013-12-31
  • 打赏
  • 举报
回复
引用 5 楼 sp1234 的回复:
[quote=引用 3 楼 R_zhanche 的回复:] 我测试哪个都不对啊,按理说默认是使用post方法,但是却会提示【远程服务器返回错误: (405) 不允许的方法】
写一个服务器端接受页面(推荐ashx),并且调试。贴出你的调试画面。[/quote] 不是不需要接受页面吗
  • 打赏
  • 举报
回复
引用 3 楼 R_zhanche 的回复:
我测试哪个都不对啊,按理说默认是使用post方法,但是却会提示【远程服务器返回错误: (405) 不允许的方法】
写一个服务器端接受页面(推荐ashx),并且调试。贴出你的调试画面。
全栈极简 2013-12-31
  • 打赏
  • 举报
回复
WebClient.UploadFile(uriString,"PUT",fileNamePath); try...
R_zhanche 2013-12-31
  • 打赏
  • 举报
回复
引用 2 楼 guwei4037 的回复:
不需要,可以直接上传到指定目录下。
   webClient.UploadFile("http://apitest.myserver.com/uploadfile", filePath);
            
本地文件 map.jpg传到服务器apitest.myserver.com网站下的uploadfile文件夹下, 这里的filepath是写map.jpg 还是 【本地绝对路径+map.jpg】 我测试哪个都不对啊,按理说默认是使用post方法,但是却会提示【远程服务器返回错误: (405) 不允许的方法】
全栈极简 2013-12-31
  • 打赏
  • 举报
回复
不需要,可以直接上传到指定目录下。
egood21 2013-12-31
  • 打赏
  • 举报
回复
private Task<HttpResponseMessage> Post(string rootPath, string folder,bool newFileName) { var PATH = HttpHelper.AbsolutePath(rootPath); if (Request.Content.IsMimeMultipartContent()) { string uploadPath = string.IsNullOrEmpty(folder) ? PATH : Path.Combine(PATH, folder); if (!Directory.Exists(uploadPath)) { Directory.CreateDirectory(uploadPath); } var streamProvider = new CustomMultipartFormDataStreamProvider(uploadPath, newFileName); var task = Request.Content.ReadAsMultipartAsync(streamProvider).ContinueWith<HttpResponseMessage>(t => { if (t.IsFaulted || t.IsCanceled) { throw new HttpResponseException(HttpStatusCode.InternalServerError); } var fileInfo = streamProvider.FileData.Select(i => { var oldFileName = i.Headers.ContentDisposition.FileName; oldFileName = oldFileName.Replace("\"", string.Empty); var info = new FileInfo(i.LocalFileName); string fileName = info.Name; //后缀名 string extenstion = string.Empty; if (fileName.IndexOf(".") >= 0) //含有后缀名 extenstion = fileName.Substring(fileName.LastIndexOf(".") + 1); long size = info.Length / 1024; //返回的路径,不再添加主目录 --- //string newFilePath = string.IsNullOrEmpty(folder) ? rootPath + "/" + fileName : rootPath + "/" + folder + "/" + fileName; string newFilePath = string.IsNullOrEmpty(folder) ? fileName : folder + "/" + fileName; return new FileDesc(oldFileName, newFilePath, size, extenstion); //return new FileDesc(info.Name, rootUrl + "/" + folderName + "/" + info.Name, info.Length / 1024); }); return Request.CreateResponse(HttpStatusCode.OK, fileInfo); }); return task; } else { throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.NotAcceptable, "This request is not properly formatted")); } } public class CustomMultipartFormDataStreamProvider : MultipartFormDataStreamProvider { private bool _newFileName = false; public CustomMultipartFormDataStreamProvider(string path) : this(path, true) { } public CustomMultipartFormDataStreamProvider(string path, bool newFileName) : base(path) { _newFileName = newFileName; } public override string GetLocalFileName(HttpContentHeaders headers) { var name = !string.IsNullOrWhiteSpace(headers.ContentDisposition.FileName) ? headers.ContentDisposition.FileName : "NoName"; name = name.Replace("\"", string.Empty); if (_newFileName) { string newFileName = GetNewFileName(name); return newFileName; //this is here because Chrome submits files in quotation marks //which get treated as part of the filename and get escaped } //返回原有名称 return name; } /// <summary> /// 获取新的名称 比如:aa.jpg转化为aa(20090504).jpg /// </summary> /// <param name=”fileName”>文件名称[aa.jpg]</param> /// <returns>新的文件名称</returns> public static string GetNewFileName(string fileName) { if (string.IsNullOrEmpty(fileName)) return string.Empty; string newFileName = string.Empty; if (fileName.IndexOf(".")>=0) //含有后缀名 { //文件后缀名 string extenstion = fileName.Substring(fileName.LastIndexOf(".") + 1); string name = fileName.Substring(0, fileName.LastIndexOf(".")) + "(" + DateTime.Now.ToFileTime() + ")"; newFileName = name + "." + extenstion; } else { string name = fileName + "(" + DateTime.Now.ToFileTime() + ")"; newFileName = name; } return newFileName; } }

110,566

社区成员

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

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

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