如何:将文件从本地文件夹上载到 SharePoint 网站
哈哈!标题和WSS3.0SDK里面一样! 不过我感觉SDK里面的代码我copy出来执行有点问题! 应该我自己的原因吧! 在看SDK之前我也做过上传文件! 现在看看之前的代码,真的是自己的觉得不好意思了.还好这次自我感觉还良好吧!:-)
<form id="form1" runat="server"> <div> <asp:FileUpload ID="FileUpload1" runat="server" /><br /> <asp:CheckBox ID="cbOverWrite" runat="server" Text="Overwrite existing files" /> <asp:Button ID="BtnUupload" runat="server" Text="Upload" onclick="BtnUupload_Click" /> <asp:Label ID="lblMsg" runat="server" Text=""></asp:Label> </div> </form>
//上传文件 private void UploadFile() { if (!FileUpload1.HasFile) { lblMsg.Text = "请选择你要上传的文件"; return; } string destUrl = siteUrl; SPWeb site = new SPSite(destUrl).OpenWeb(); //Stream stream = FileUpload1.PostedFile.InputStream; //byte[] contents = new byte[stream.Length]; byte[] contents = FileUpload1.FileBytes; //stream.Read(contents, 0, (int) stream.Length); //stream.Close(); site.AllowUnsafeUpdates = true; //上传到的位置 SPFolder folder = site.Lists["KB"].RootFolder; /** * 判断是否存在该文件 * 1.使用GetFile()方法 * 2.使用try catch * */ bool result = site.GetFile(folder.Url + @"/" + FileUpload1.FileName).Exists; if (result && !cbOverWrite.Checked) { lblMsg.Text = "已经上传一个名字相同的文件!请修改名称"; } else { if (cbOverWrite.Checked) { site.GetFile(folder.Url + @"/" + FileUpload1.FileName).Delete(); } //这里上传的文件都在 RootFolder 里面 site.Files.Add(folder.Url + @"/" + FileUpload1.FileName, contents); //在 RootFolder 文件夹里面创建一个 MyFiles文件夹 SPFolder subFolder = folder.SubFolders.Add(folder.Url + @"/MyFiles"); site.Files.Add(subFolder.Url + @"/" + FileUpload1.FileName, contents); lblMsg.Text = "上传成功"; } #region UseTry /* try { //因为这里如果文件不存在 ,索引找不到 result = folder.Files[site.Lists["KB"].RootFolder.Url + @"/" + FileUpload1.FileName].Exists; if(result) { lblMsg.Text = "已经上传一个名字相同的文件!请修改名称"; } } catch (Exception) { site.Files.Add(site.Lists["KB"].RootFolder.Url + @"/" + FileUpload1.FileName, contents); } */ #endregion }
protected void BtnUupload_Click(object sender, EventArgs e) { UploadFile(); }
现在想想之前的代码!
1.上传文件还要先上传到服务器的磁盘里面,因为用FileStream只能读取本地文件,我之前做的时候在本地测试通过,但是发布出去别人电脑始终不能上传文件,因为在服务器的盘里找不到客服端的文件!错误信息为:Could not find a part of the path "X\1.jpg" 因为没有调用SaveAs方法保存到服务器里面! 这个问题困惑了我很久很久!
2.当时判断上传的文件是否存在的时候用的for循环判断Folder里面所有文件和上传的文件对比!哎…现在想想如果文件量很大很大的时候呢? 现在想想都想打自己两下!
总结:
不要为了实现功能而实现功能! 很多时候当我们接到一个任务的时候,总是想着先实现功能在说吧! 实现功能也许你很快,也许一天,一个小时! 但是你考虑过其他还有好的方法吗? 性能等方面!之前在园子里面看到过一篇文章说的很好! 不要实现了功能只花了一天时间,而后修复bug需要一周时间! 不要为了快而快! 希望我能更快的改变我的这个不好习惯! 实现某个功能的时候,多选几个方法,多想想,选一个更好的! 写出自己看的起的code!
如果上面有什么错误,请大家指出… 共同学习!
Powered By D&J (URL:http://www.cnblogs.com/Areas/)