簡體   English   中英

將文件上載到Sharepoint上的文件夾或子文件夾

[英]Upload file to folder or subfolder on Sharepoint

我試圖創建一個方法將文件流上傳到sharepoint到目前為止我有這個

        public static void SPUploadFileStream(string username, string filePath, Stream fileData)
    {
        //string siteUrl = Configuration.SPSiteURL;
        string siteUrl = SPContext.Current.Web.Url;
        SPUser currentUser = SPUtils.GetCurrentUser(username);
        if (currentUser == null)
        {
            throw new SPGappUnknownUserException(username);
        }

        using (SPSite site = new SPSite(siteUrl, currentUser.UserToken))
        {
            using (SPWeb web = site.OpenWeb())
            {
                bool allowWebUnsafeUpdt = web.AllowUnsafeUpdates;
                if (!allowWebUnsafeUpdt)
                    web.AllowUnsafeUpdates = true;
                try
                {
                    SPCreateFolder(Path.GetDirectoryName(filePath), username);
                    SPFile newFile = web.Files.Add(filePath, fileData, true); //true = replace
                }
                catch (Exception ex)
                {
                    LoggingService.LogError(ex);
                    //site.AllowUnsafeUpdates = allowSiteUnsefaUpdt;
                    web.AllowUnsafeUpdates = allowWebUnsafeUpdt;
                    throw new ApplicationException("ERROR "+ ex.ToString());
                }
            }
        }
    }

但是如果我有一個像"FOLDER/file.jpg"這樣的路徑它可以正常工作,但是當我有子文件夾"FOLDER/SUB/file.jpg"時,任何人都可以給我一些指示嗎?

我的猜測是問題在於你的SPCreateFolder方法。 它應該以遞歸方式創建文件夾。 當您嘗試添加新文件時

SPFile newFile = web.Files.Add(filePath, fileData, true); //true = replace

服務器相對路徑必須存在。 嘗試以下方法創建文件夾

private static void SPCreateFolder(SPWeb web, string filepath)
{
    // since you pass this as Path.GetDictionary it's no longer split by '/'
    var foldersTree = filepath.Split('\\');
    foldersTree.Aggregate(web.RootFolder, GetOrCreateSPFolder);
}

private static SPFolder GetOrCreateSPFolder(SPFolder sourceFolder, string folderName)
{
    SPFolder destination;

    try
    {
        // return the existing SPFolder destination if already exists
        destination = sourceFolder.SubFolders[folderName];
    }
    catch
    {
        // Create the folder if it can't be found
        destination = sourceFolder.SubFolders.Add(folderName);
    }

    return destination;
}

然后你可以執行它

...
    SPCreateFolder(web, Path.GetDirectoryName(filePath));
    SPFile newFile = web.Files.Add(filePath, fileData, true); //true = replace
...

如果有幫助,請告訴我

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM