如何:将文件从本地文件夹上载到 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!

 

如果上面有什么错误,请大家指出… 共同学习!

posted @ 2011-09-30 13:23  Areas  阅读(596)  评论(0编辑  收藏  举报