Метод SaveAs настроен так, чтобы требовать корневого пути, а путь <blah>не является корневым - PullRequest
1 голос
/ 14 мая 2010

ОК. Я видел несколько человек с этой проблемой - но я уже использую путь к файлу, а не относительный путь. Мой код отлично работает на моем ПК, но когда другой разработчик отправляет изображение, он получает эту ошибку. Я думал, что это было разрешение на доступ к папке, но системная учетная запись имеет полный доступ к папке (хотя я не понимаю, как проверить, под какой учетной записью работает приложение). Также, как правило, локальный запуск не дает особых проблем с безопасностью :)

Фрагмент кода:

        Guid fileIdentifier = Guid.NewGuid();
        CurrentUserInfo currentUser = CMSContext.CurrentUser;
        string identifier = currentUser.UserName.Replace(" ", "") + "_" + fileIdentifier.ToString();
        string fileName1 = System.IO.Path.GetFileName(fileUpload.PostedFile.FileName);
        string Name = System.IO.Path.GetFileNameWithoutExtension(fileName1);
        string renamedFile = fileName1.Replace(Name, identifier);
        string path = ConfigurationManager.AppSettings["MemberPhotoRepository"];

        String filenameToWriteTo = path + currentUser.UserName.Replace(" ", "") + fileName1;
        fileUpload.PostedFile.SaveAs(filenameToWriteTo);

Где мои значения настроек конфига:

Опять же, это прекрасно работает на моем ПК! (И я проверил, есть ли у другого человека папка на их ПК).

Любые предложения будут оценены - спасибо:)

Ответы [ 3 ]

0 голосов
/ 02 июня 2010

Не уверен, в чем была проблема, так как она сама разобралась. Мы не заканчивали отладку, как это было на ПК, не принадлежащем разработчику, и у меня был обходной путь, чтобы он продолжил свою работу, пока я исследовал возможные причины. Так что, возможно, он обновил / запустил сайт или разрешил доступ к файлам, взяв копию моего каталога.

По крайней мере, я знаю, что ему нужны физические пути к файлам, так что, надеюсь, больше с этим не столкнется!

0 голосов
/ 31 августа 2012

Пожалуйста, убедитесь, что папка, в которой вы сохраняете файл, существует. Если папка не существует, она не будет создана для вас, и метод SaveAs выдаст исключение, которое у вас есть.

Спасибо.

0 голосов
/ 14 мая 2010

Очевидно, что это говорит о том, что ваш filenameToWriteTo не является корневым путем ... т.е. это относительный путь, и конфигурации вашего сервера это не нравится. Используйте Server.MapPath для получения реальных путей ... что-то вроде ...

string realPhysicalPath = Path.Combine(Server.MapPath(" "), filenameToWriteTo);
fileUpload.PostedFile.SaveAs(realPhysicalPath);

На всякий случай распечатайте ваше filenameToWriteTo, чтобы увидеть, является ли его относительный или физический путь. Если это относительно, используйте подход выше.

...