2010-09-13 2 views
0

вот вызов ...Почему этот код отправляет 0kb-файлы в браузер?

return new FileUriResult("application/octet-stream", a.AssetPath, null); 

[обратите внимание, что я установил длину содержимого обнулить, потому что я не знаю его (файл находится на другом сервере)]

a.AssetPath является: " http://http.cdnlayer.com/account имя/папка/папка/папка/asset.mp3"

(поддельный URL для этого примера, но в моей реализации я могу просмотреть файл непосредственно, однако этот способ крепления не работает)

здесь реализация ...

public class FileUriResult : ActionResult 
    { 
     private string _contentType; 
     private string _fileUri; 
     private long? _fileLength; 

     public FileUriResult(string contentType, string fileUri, long? fileLength) 
     { 
      _contentType = contentType; 
      _fileUri = fileUri; 
      _fileLength = fileLength; 
     } 

     public override void ExecuteResult(ControllerContext context) 
     { 
      if (context == null) 
      { 
       throw new ArgumentNullException("context"); 
      } 

      HttpResponseBase response = context.HttpContext.Response; 

      response.ContentType = _contentType; 
      response.AddHeader("Content-Disposition", "attachment; filename=" + _fileUri); 
      if(_fileLength != null) 
       response.AddHeader("Content-Length", _fileLength.ToString()); 
     } 
    } 

Файл быть непосредственно загружен так же, как я хочу (не открывается в браузере), однако это не файл, это просто 0kb файл с таким же именем.

+0

Я не знаю MVC, но мой здравый смысл говорит, что вам, вероятно, нужно добавить содержимое файла в ответ, иначе он просто отправит информацию о файле, без него (информация, подобная имени файла) –

ответ

1

Вы можете принудительно скачать как вложение, отправив двоичные данные, используя, например, FileResult. Таким образом вы не можете принудительно загрузить файл в виде вложения из URL-адреса. Все, что вы говорите в браузере, - это то, что следует за вложением, и вы указываете ему URL как имя, с помощью которого его можно сохранить.

Вам нужно будет прочитать в файле самостоятельно и записать его в ответ как последовательность байтов.

+0

спасибо , это имеет смысл, я всегда ожидаю слишком много технологий – BigOmega

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