Метод SaveAs настроен так, чтобы требовать корневого пути, а путь «fp» не является корневым - PullRequest
11 голосов
/ 30 июля 2009

Я делаю загрузчик изображений в Asp.net, и я даю следующий код под мои элементы управления:

    string st;
    st = tt.PostedFile.FileName;
    Int32 a;
    a = st.LastIndexOf("\\");
    string fn;
    fn = st.Substring(a + 1);
    string fp;
    fp = Server.MapPath(" ");
    fp = fp + "\\";
    fp = fp + fn;
    tt.PostedFile.SaveAs("fp");

Но при загрузке или сохранении изображения появляется сообщение об ошибке, что метод SaveAs настроен так, чтобы требовать корневой путь, а путь 'fp' не имеет корня. Поэтому, пожалуйста, помогите мне в чем проблема

Ответы [ 6 ]

26 голосов
/ 30 июля 2009

Я подозреваю, что проблема в том, что вы используете строку "fp" вместо переменной fp. Вот фиксированный код, также сделанный (IMO) более читабельным:

string filename = tt.PostedFile.FileName;
int lastSlash = filename.LastIndexOf("\\");
string trailingPath = filename.Substring(lastSlash + 1);
string fullPath = Server.MapPath(" ") + "\\" + trailingPath;
tt.PostedFile.SaveAs(fullPath);

Вам также следует рассмотреть возможность изменения предпоследней строки на:

string fullPath = Path.Combine(Server.MapPath(" "), trailingPath);

Вы также можете подумать, что произойдет, если опубликованный файл использует / вместо \ в имени файла ... например, если он публикуется из Linux. Фактически, вы можете изменить все первые три строки на:

string trailingPath = Path.GetFileName(tt.PostedFile.FileName));

Сочетая их, мы получим:

string trailingPath = Path.GetFileName(tt.PostedFile.FileName));
string fullPath = Path.Combine(Server.MapPath(" "), trailingPath);
tt.PostedFile.SaveAs(fullPath);

Много чище, ИМО:)

3 голосов
/ 09 августа 2017

Использование Server.MapPath():

fileUploader.SaveAs(Server.MapPath("~/Images/")+"file.jpg");
2 голосов
/ 30 июля 2009

Читая заголовок вопроса, я подумал, что, похоже, вы поставили кавычки вокруг имени переменной. Не веря, что это так, я открыл вопрос, чтобы прочитать его, но это действительно было так ...

2 голосов
/ 30 июля 2009

Если вы хотите сохранить загруженный файл в значение из fp, просто передайте его, не заключайте в кавычки:

tt.PostedFile.SaveAs(fp);
1 голос
/ 21 сентября 2015

Мы не можем использовать метод " SaveAs " для прямой записи на FTP-сервер. Для вышеуказанного метода поддерживаются только локальные и UNC-пути.

Чтобы сохранить его на FTP, используйте класс FtpWebRequest .

Вы получите полную информацию по этому вопросу в ответе на вопрос такого же типа в social.msdn.

Пожалуйста, перейдите по ссылке .. и вы сможете решить проблему ..

введите описание ссылки здесь

- спасибо за ответ Джесси ХоуингXPirit (MCC, Партнер, MVP)

1 голос
/ 06 августа 2013

Я столкнулся с той же проблемой. Проблема в том, что вы не указали путь к серверу, на котором вы хотите сохранить файл. И вот, возможно, более простой ответ:

string fileName = tt.PostedFile.FileName;
string savePath = Server.MapPath("Path/Of/The/Folder/Comes/Here/") + fileName);
tt.PostedFile.SaveAs(savePath);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...