Сохраните и получите доступ к файлу на веб-сервере и локальном хосте
Я хотел бы сохранить файл на веб-сервере из моего полностью работающего элемента управления загрузкой файлов. Я получил HttpPostedFile file = HttpContext.Current.Request.Files[0];
и я хотел бы сохранить его на моем сервере.
Мой сервер называется "appharbor" ( https://appharbor.com/), и его спецификация гласит, что у меня есть права на запись в файл для Path.getTempPath();
папка.
Мой код для сохранения файла:
HttpPostedFile file = HttpContext.Current.Request.Files[0];
string dirrectoryPath =Path.GetTempPath();
string fileName = Path.GetFileName(file.FileName);
string mapPath = HttpContext.Current.Server.MapPath(dirrectoryPath);
Directory.CreateDirectory(mapPath);
string fileFullPath = Path.Combine(mapPath, fileName);
file.SaveAs(fileFullPath);
myModel.uri = fileFullPath;
Как я могу переделать этот код в рабочем режиме?
Посмотреть:
String pdf = "http://docs.google.com/gview?url=" + @Model.uri + "&embedded=true";
<iframe src="@pdf" style="width:100%; height: 1000px;" frameborder="0"></iframe>
Как видите, мы ТОЛЬКО пытаемся ОТОБРАЖАТЬ файл на веб-странице. Не разрешать пользователю загружать его (однако для него нет особых ограничений).
РЕДАКТИРОВАТЬ
Подробная информация о том, что происходит сейчас и с небольшими изменениями:
Когда у меня есть
string dirrectoryPath = Path.GetTempPath();
тогда это происходит на сервере:
POST http://warsztatynet.apphb.com/api/upload 500 (Internal Server Error)
и это происходит локально
An exception of type 'System.Web.HttpException' occurred in System.Web.dll but was not handled in user code
Additional information: 'C:/Users/Tunczyk/AppData/Local/Temp/' expected virtual path.
И я подозреваю, что это абсолютно одно и то же, потому что оба они выполняются в одной и той же функции.
Path.GetTempPath();
его папка App_Data на веб-сервере и на локальном хосте
Когда у меня есть
string dirrectoryPath ="~/App_Data";
тогда это происходит на сервере:
GET http://c/Users/MyPath/sample.rtf 404 (Not Found)
и это происходит локально:
GET http://c/Users/MyPath/sample.rtf 404 (Not Found)
РЕДАКТИРОВАТЬ 2 Это ответ для сообщения Caótico Fanegas:
Not allowed to load local resource: file:///D:/Users/apphb5dac91d9317868/AppData/Local/Temp/glyphicons-halflings.png
Вот что происходит, когда я делаю это так:
string dirrectoryPath = Path.GetTempPath();
string fileName = Path.GetFileName(file.FileName);
Directory.CreateDirectory(dirrectoryPath);
string fileFullPath = Path.Combine(dirrectoryPath, fileName);
file.SaveAs(fileFullPath);
Ребята, я ищу самый простой способ сделать это. Это не коммерческое применение. Это только для университета.
РЕДАКТИРОВАТЬ 3
Чтобы быть более понятным, я дам вам ссылку на мое приложение: MyWebsite Чтобы протестировать его, вы должны:
- нажмите вкладку создания курса
- Нажмите кнопку +
- выберите любую схему урока, нажав на нее
- Нажмите любой из цветных divs
- Выберите тип файла из списка
- Загрузить файл
Должен отображаться Ваш файл, но это не так (в основном это вид - нажал div).
Я рекомендую использовать Google Chrome, потому что в другом браузере у вас могут быть некоторые визуальные проблемы.
2 ответа
Вам нужно будет сохранить файл в любом месте указанного пути, а затем использовать действие для извлечения этого файла, используя результат действия FileResult.
public FileResult file(string fileName)
{
return File(Path.Combine(Path.GetTempPath(), fileName), System.Net.Mime.MediaTypeNames.Application.Octet);
}
Это не полное решение, но оно должно поставить вас на правильный путь.
ПохожеHttpPostedFile.SaveAs()
ожидает виртуальный путь для сохранения файлов."~/App_data"
подход должен работать, если вы не переводите его на локальный путь через Server.MapPath()
,
Если по какой-либо причине вы вынуждены сохранить в TempPath (например, проблемы с разрешениями), вы можете использоватьStream.CopyTo()
способ сохранить файл по случайному физическому пути.
using (var newFile = System.IO.File.Create("local_path"))
{
fil.InputStream.CopyTo(newFile);
}
Этот код исходит из моей головы, и поэтому не является надежным на 100%. Может быть, нужна работа.