Метод SaveAs настроен так, чтобы требовать корневой путь, а путь "fp" не укоренен

Я делаю загрузчик изображений в 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" не внедрен. Итак, пожалуйста, помогите мне в чем проблема.

Ответ 1

Я подозреваю, что проблема заключается в том, что вместо переменной 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);

Многое более чистое, ИМО:)

Ответ 2

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

tt.PostedFile.SaveAs(fp);

Ответ 3

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

Ответ 4

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

string fileName = tt.PostedFile.FileName;
string savePath = Server.MapPath("Path/Of/The/Folder/Comes/Here/") + fileName);
tt.PostedFile.SaveAs(savePath);

Это все! Коды удачи!

Ответ 5

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

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

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

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

введите ссылку здесь

- спасибо за ответ от Jesse HouwingXPirit (MCC, Partner, MVP)

Ответ 6

Используйте Server.MapPath():

fileUploader.SaveAs(Server.MapPath("~/Images/")+"file.jpg");