2016-08-10 2 views
1

Im Versuch, eine Methode zum Erstellen einer Datei-Stream auf einer Sharepoint zu laden, so weit ich habe diesesHochladen Datei in den Ordner oder Unterordner auf 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()); 
       } 
      } 
     } 
    } 

aber es funktioniert ok, wenn ich einen Weg wie "FOLDER/file.jpg" aber es haben nicht wenn ich Unterordner habe "FOLDER/SUB/file.jpg" kann mir jemand einige Hinweise geben?

Antwort

0

Meine Vermutung ist, dass das Problem in Ihrer SPCreateFolder Methode liegt. Es sollte Ordner rekursiv erstellt haben. Als wenn Sie versuchen, neue Datei mit

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

den Server relativen Pfad muss vorhanden sein. Versuchen Sie folgende Methode zur Ordnererstellung

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; 
} 

Dann können Sie diese ausführen mit

Lassen Sie mich wissen, ob das hilft

Verwandte Themen