2013-09-04 4 views
0

Я написал пользовательский httphandler для файлов DocX, и я пытаюсь, чтобы файлы отображались через iframe.FileStreamResult и пользовательский httphandler

Вот мой контроллер:

public ActionResult LoadDOC(string path) 
    { 
     var fsSource = new FileStream(path, FileMode.Open, FileAccess.Read); 
     return new FileStreamResult(fsSource, "application/vnd.openxmlformats-officedocument.wordprocessingml.document") 
     { 
      FileDownloadName = "newfile.docx" 
     }; 
    } 

}

Имя файла должно быть изменено таким образом, что HttpHandler может забрать его. Файлы находятся на файловом сервере без расширений (они переименованы в guid). Например:

"\\\\fileservername\\Documents\\811943a3-56f7-42cb-8450-1b8319a426b4\\633d9f3e-df99-408e-b59c-ec8efa4fa41f" 

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

Когда вышеуказанное выполняется в iframe, файл сразу загружается. Однако файлы PDF и текстовые файлы выглядят правильно.

Вот обычай HttpHandler:

 <add name="DOCXhandler" path="*.docx" verb="GET" type="MyProject.Handlers.DocxHandler, MyProject" preCondition="integratedMode" /> 

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

Можно ли просто изменить обработчик по типу контента?

Редактировать: вопрос для ясности;

  • Возможно ли сделать работу с обработчиком http по типу контента, а не расширением?
  • Как я могу убедиться, что filestreamresult использует мой пользовательский httphandler для файлов .docx при отображении в iframe?
  • Я иду об этом правильно, или я чего-то не хватает?

ответ

0

Рассмотрим добавление «.docx» расширение к оказанной Url к файлу и чем удаление его ваше LoadDoc действие (то есть дешевый хак - path = path.Replace(".docx", ""), предпочитают использовать методы из Path класса, чтобы сделать это манипуляция).

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

+0

Благодарим за внимание. Я изменю это.Однако этот метод по-прежнему не привел к тому, что мой пользовательский обработчик подберет файл; он по-прежнему загружает :( –

+0

@ user2414886 - Я не уверен, в чем ваш вопрос, чем ... Похоже, вы пытаетесь исправить то, что обработчик назвал серверной стороной, но из комментария он выглядит так, как будто вам нужен пользовательский рендеринг для DOCX на клиенте (тот, который отобразит DOC/DOCX внутри браузера) ... Пожалуйста, уточните свой вопрос. –

+0

Отредактировано для, надеюсь, немного более ясно. Спасибо еще раз =) –

0

Я действительно плохо разбирался в проблеме.

Я изменил способ, которым контроллер установил iframe в фактический путь фиктивного файла: например: «localhost/Project/12345_6789.docx», где 12345 является идентификатором группы, а 6789 - идентификатором документа.

HttpHandler Я сделал это ожидает и изменяет путь к файлу: «//// fileserverpath/documentspath/12345/6789»

Я больше не потоковое файл непосредственно через контроллер, но вместо этого через моего обработчика для запроса.

Надеюсь, что это поможет кому-то!

Смежные вопросы