Сохраните и получите доступ к файлу на веб-сервере и локальном хосте

Я хотел бы сохранить файл на веб-сервере из моего полностью работающего элемента управления загрузкой файлов. Я получил 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 Чтобы протестировать его, вы должны:

  1. нажмите вкладку создания курса
  2. Нажмите кнопку +
  3. выберите любую схему урока, нажав на нее
  4. Нажмите любой из цветных divs
  5. Выберите тип файла из списка
  6. Загрузить файл

Должен отображаться Ваш файл, но это не так (в основном это вид - нажал 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%. Может быть, нужна работа.

Другие вопросы по тегам