将文件上载到Sharepoint上的文件夹或子文件夹

时间:2016-08-10 15:06:31

标签: c# sharepoint

我试图创建一种方法将文件流上传到共享点到目前为止我有这个

<?php 
namespace app\controllers;

use Yii;
use app\models\FeuilleDeJourResponsable;
use app\models\MeteoPrevision;
use app\models\PosteFdj;
use app\models\CategorieFdj;
use app\models\Personnel;
use app\models\FeuilleDeJourResponsableSearch;
use yii\web\Controller;
use yii\web\NotFoundHttpException;
use yii\filters\VerbFilter;

/**
 * FeuilleDeJourResponsableController implements the CRUD actions for FeuilleDeJourResponsable model.
 */
class FeuilleDeJourResponsableController extends Controller
{
    /**
     * @inheritdoc
     */
    public function behaviors()
    {
        return [
            'verbs' => [
                'class' => VerbFilter::className(),
                'actions' => [
                    'delete' => ['POST'],
                ],
            ],
        ];
    }

/**
 * Lists all FeuilleDeJourResponsable models.
 * @return mixed
 */
public function actionIndex()
{
    $searchModel = new FeuilleDeJourResponsableSearch();
    $dataProvider = $searchModel->search(Yii::$app->request->queryParams);

    return $this->render('index', [
        'searchModel' => $searchModel,
        'dataProvider' => $dataProvider,
    ]);
}

/**
 * Displays a single FeuilleDeJourResponsable model.
 * @param string $Date_Calendaire
 * @param integer $ID_Poste_FDJ
 * @return mixed
 */
public function actionView($Date_Calendaire, $ID_Poste_FDJ, $ID_Categorie, $Code_Personnel)
{
    return $this->render('view', [
        'model' => $this->findModel($Date_Calendaire, $ID_Poste_FDJ, $ID_Categorie, $Code_Personnel),
    ]);
}

/**
 * Creates a new FeuilleDeJourResponsable model.
 * If creation is successful, the browser will be redirected to the 'view' page.
 * @return mixed
 */
public function actionCreate()
{           
    $feuille_de_jour_responsable = new FeuilleDeJourResponsable();
    $meteo_prevision = new MeteoPrevision();
    $poste_fdj = new PosteFdj();
    $categorie_fdj = new CategorieFdj();
    $personnel = new Personnel();

    if ($feuille_de_jour_responsable->load(Yii::$app->request->post()) && $meteo_prevision->load(Yii::$app->request->post()) && $poste_fdj->load(Yii::$app->request->post()) && $categorie_fdj->load(Yii::$app->request->post()) && $personnel->load(Yii::$app->request->post()) && FeuilleDeJourResponsable::validateMultiple([$feuille_de_jour_responsable, $meteo_prevision, $poste_fdj, $categorie_fdj, $personnel])) 
    //if ($feuille_de_jour_responsable->load(Yii::$app->request->post()) && $meteo_prevision->load(Yii::$app->request->post()) && $poste_fdj->load(Yii::$app->request->post()) && $categorie_fdj->load(Yii::$app->request->post()) && $personnel->load(Yii::$app->request->post()) && FeuilleDeJourResponsable::validateMultiple([$feuille_de_jour_responsable]) && PosteFdj::validateMultiple([$poste_fdj]) && CategorieFdj::validateMultiple([$categorie_fdj]) ) 
    {

        $poste_fdj->save(false); 
        $categorie_fdj->save(false);
        $personnel->save(false); 

        $feuille_de_jour_responsable->ID_Poste_FDJ = $poste_fdj->ID_Poste_FDJ; // no need for validation rule on user_id as you set it yourself
        $feuille_de_jour_responsable->ID_Categorie = $categorie_fdj->ID_Categorie; // no need for validation rule on user_id as you set it yourself
        $feuille_de_jour_responsable->Code_Personnel = $personnel->Code_Personnel; // no need for validation rule on user_id as you set it yourself

        $feuille_de_jour_responsable->save(false); // skip validation as model is already validated

        $meteo_prevision->Date_Calendaire = $feuille_de_jour_responsable->Date_Calendaire; // no need for validation rule on user_id as you set it yourself
        $meteo_prevision->save(false); 

        return $this->redirect(['feuille_de_jour_responsable/view', 'Date_Calendaire' => $feuille_de_jour_responsable->Date_Calendaire]);
    } else {
        return $this->render('create', [
            'feuille_de_jour_responsable' => $feuille_de_jour_responsable,
            'meteo_prevision' => $meteo_prevision,
            'poste_fdj' => $poste_fdj,
            'categorie_fdj' => $categorie_fdj,
            'personnel' => $personnel,
        ]);
    }
}

/**
 * Updates an existing FeuilleDeJourResponsable model.
 * If update is successful, the browser will be redirected to the 'view' page.
 * @param string $Date_Calendaire
 * @param integer $ID_Poste_FDJ
 * @return mixed
 */
public function actionUpdate($Date_Calendaire/*, $ID_Poste_FDJ*/)
//public function actionUpdate($Date_Calendaire, $ID_Poste_FDJ, $ID_Categorie)
{       
    $feuille_de_jour_responsable = FeuilleDeJourResponsable::findOne($Date_Calendaire);
    if (!$feuille_de_jour_responsable) {
        throw new NotFoundHttpException("The feuille_de_jour_responsable was not found.");
    }


    $meteo_prevision = MeteoPrevision::findOne($feuille_de_jour_responsable->Date_Calendaire);

    if (!$meteo_prevision) {
        throw new NotFoundHttpException("The feuille_de_jour_responsable has no meteo_prevision.");
    }

    $feuille_de_jour_responsable->scenario = 'update';
    $meteo_prevision->scenario = 'update';

    if ($feuille_de_jour_responsable->load(Yii::$app->request->post()) && $meteo_prevision->load(Yii::$app->request->post()) && FeuilleDeJourResponsable::validateMultiple([$feuille_de_jour_responsable, $meteo_prevision/*, $poste_fdj, $categorie_fdj, $personnel*/])) {
            $isValid = $feuille_de_jour_responsable->validate();
            $isValid = $meteo_prevision->validate() && $isValid;
            if ($isValid) {
                $feuille_de_jour_responsable->save(false);
                $meteo_prevision->save(false);
                return $this->redirect(['feuille_de_jour_responsable/view', 'Date_Calendaire' => $Date_Calendaire]);
            }
    }



    $poste_fdj = PosteFdj::findOne($feuille_de_jour_responsable->ID_Poste_FDJ);

    if (!$poste_fdj) {
        throw new NotFoundHttpException("The feuille_de_jour_responsable has no poste_fdj.");
    }

    $feuille_de_jour_responsable->scenario = 'update';
    $poste_fdj->scenario = 'update';

    if ($feuille_de_jour_responsable->load(Yii::$app->request->post()) && $poste_fdj->load(Yii::$app->request->post()) && FeuilleDeJourResponsable::validateMultiple([$feuille_de_jour_responsable, $meteo_prevision, $poste_fdj, $categorie_fdj, $personnel])) {
        $isValid = $feuille_de_jour_responsable->validate();
        $isValid = $poste_fdj->validate() && $isValid;
        if ($isValid) {
            $feuille_de_jour_responsable->save(false);
            $poste_fdj->save(false);
            return $this->redirect(['feuille_de_jour_responsable/view', 'ID_Poste_FDJ' => $ID_Poste_FDJ]);
        }
    }



    $categorie_fdj = CategorieFdj::findOne($feuille_de_jour_responsable->ID_Categorie);

    if (!$categorie_fdj) {
        throw new NotFoundHttpException("The feuille_de_jour_responsable has no categorie_fdj.");
    }

    $feuille_de_jour_responsable->scenario = 'update';
    $categorie_fdj->scenario = 'update';

    if ($feuille_de_jour_responsable->load(Yii::$app->request->post()) && $categorie_fdj->load(Yii::$app->request->post()) && FeuilleDeJourResponsable::validateMultiple([$feuille_de_jour_responsable, $meteo_prevision, $poste_fdj, $categorie_fdj, $personnel])) {
        $isValid = $feuille_de_jour_responsable->validate();
        $isValid = $categorie_fdj->validate() && $isValid;
        if ($isValid) {
            $feuille_de_jour_responsable->save(false);
            $categorie_fdj->save(false);
            return $this->redirect(['feuille_de_jour_responsable/view', 'ID_Categorie' => $ID_Categorie]);
        }
    }



    $personnel = Personnel::findOne($feuille_de_jour_responsable->  Code_Personnel);

    if (!$personnel) {
        throw new NotFoundHttpException("The feuille_de_jour_responsable has no personnel.");
    }

    $feuille_de_jour_responsable->scenario = 'update';
    $personnel->scenario = 'update';

    if ($feuille_de_jour_responsable->load(Yii::$app->request->post()) && $personnel->load(Yii::$app->request->post()) && FeuilleDeJourResponsable::validateMultiple([$feuille_de_jour_responsable, $meteo_prevision, $poste_fdj, $categorie_fdj, $personnel])) {
        $isValid = $feuille_de_jour_responsable->validate();
        $isValid = $personnel->validate() && $isValid;
        if ($isValid) {
            $feuille_de_jour_responsable->save(false);
            $personnel->save(false);
            return $this->redirect(['feuille_de_jour_responsable/view', 'Code_Personnel' => $Code_Personnel]);
        }
    }
}

/**
 * Deletes an existing FeuilleDeJourResponsable model.
 * If deletion is successful, the browser will be redirected to the 'index' page.
 * @param string $Date_Calendaire
 * @param integer $ID_Poste_FDJ
 * @return mixed
 */
public function actionDelete($Date_Calendaire, $ID_Poste_FDJ, $ID_Categorie, $Code_Personnel)
{
    $this->findModel($Date_Calendaire, $ID_Poste_FDJ, $ID_Categorie, $Code_Personnel)->delete();

    return $this->redirect(['index']);
}

/**
 * Finds the FeuilleDeJourResponsable model based on its primary key value.
 * If the model is not found, a 404 HTTP exception will be thrown.
 * @param string $Date_Calendaire
 * @param integer $ID_Poste_FDJ
 * @param integer $ID_Categorie 
 * @param integer $Code_Personnel 
 * @return FeuilleDeJourResponsable the loaded model
 * @throws NotFoundHttpException if the model cannot be found
 */
protected function findModel($Date_Calendaire, $ID_Poste_FDJ, $ID_Categorie, $Code_Personnel)
{
    if (($feuille_de_jour_responsable = FeuilleDeJourResponsable::findOne(['Date_Calendaire' => $Date_Calendaire, 'ID_Poste_FDJ' => $ID_Poste_FDJ, 'ID_Categorie' => $ID_Categorie, 'Code_Personnel' => $Code_Personnel])) !== null) {
        return $feuille_de_jour_responsable;
    } else {
        throw new NotFoundHttpException('The requested page does not exist.');
    }
}
}

但如果我有 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"时它没有 谁能给我一些指示?

1 个答案:

答案 0 :(得分:0)

我的猜测是问题出在你的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
...

如果有帮助,请告诉我