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

 

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

你可能感兴趣的:(SharePoint)