作的时候用的是WPF,需要做一个上传附件的功能,服务器上有一个文件夹,附件都上传到里面,只知道URL路径.
文件夹是在服务器上的IIS里面(就比如说你发布一个网站,把文件夹建在网站下面,当然这个网站啥都没有,你需要的是这个文件夹在这个网站下面的路径,既url路径)
打开窗口选择文件:
if (open.ShowDialog() == System.Windows.Forms.DialogResult.OK) { foreach (string f in open.FileNames) { list.Add(new FileInfo(f)); } }
把路径加到list里面
上传附件:
这块需要注意如果你的文件非常大的话就需要把流分开上传了
try { WebClient wc = new WebClient(); wc.Credentials = new NetworkCredential("zhangsan", "123456"); FileStream fs = new FileStream(oldPath, FileMode.Open, FileAccess.Read); BinaryReader br = new BinaryReader(fs); byte[] result = br.ReadBytes(Convert.ToInt32(fs.Length)); Stream s = wc.OpenWrite(new Uri(path), "PUT"); if (s.CanWrite) { s.Write(result, 0, result.Length); } s.Flush(); s.Close(); fs.Close(); } catch (Exception) { return false; }
这个oldPath是你在本地选中的文件的路径,path是你要上传到服务器上的路径,包括你上传的文件的名字,比如http://202.202.1.299:80/Up/aaa.jpg
zhangsan是你在服务器上的一个账号的名称,123465是密码,你需要给这个账号读写的权限,并且需要给WebDAV创建一个规则,如图
而且记得把你存放上传文件的文件夹的读写权限给你的这个账号,如图
判断文件夹是否存在
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(filename); request.Credentials = new NetworkCredential("zhangsan", "123456"); request.Method = "PROPFIND"; request.Headers.Add("Depth", "0"); request.Headers.Add("Translate: f"); WebResponse response = null; try { response = request.GetResponse(); } catch (WebException exception) { if (exception.Message.IndexOf("404") != -1) { return false; } throw exception; } finally { if (response != null) { response.Close(); } }
如果没有,那就创建文件夹
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(foldername); request.Credentials = new NetworkCredential("zhangsan", "123456"); request.Method = "MKCOL"; WebResponse response = null; try { response = request.GetResponse(); } catch (WebException exception) { return false; } finally { if (response != null) { response.Close(); } }
上传就没了,做完了.
|
请发表评论