2017-02-21 17 views
1

Я пытаюсь загрузить файл, который может быть PDF, cvs, word, jpg или png. Для этого я использую angularjs + filesaver.js. не знаю, почему, но мои загрузки всегда повреждены.Загрузите файл с помощью AngularJS + FileSaver.js + .Net MVC

Кто-нибудь может мне помочь?

Примечание: midia.Nome - Название моего файла. midia.Tipo - Тип файла. midia.Path - Физический путь по проекту. midia.MidiaBytesString - Bytes на Base64 для преобразования в blob.

<a href="{{midia.path}}" target="_blank" ng-click="Download(midia.MidiaBytesString, midia.Nome, midia.Tipo)">Download</a> <br /> 

Мой метод загрузки файла:

$scope.Download = function(bytes,nome,tipo){ 
var file = new File([bytes], nome , {type: "application/octet-stream"}); 
saveAs(file); 
}; 

Мой вид Модель

общественного класса MidiaViewModel { общественного ИНТ MidiaId {получить; задавать; }

public string MidiaDescricao { get; set; } 

    //public string MidiaPath { get; set; } 

    public byte[] MidiaBytes { get; set; } 

    public string MidiaBytesString { get; set; } 

    public int OsId { get; set; } 

    public virtual OsViewModel Os { get; set; } 

    public string MidiaNome { get; set; } 

    public string MidiaType { get; set; } 

    public string MidiaPath { get; set; } 

    public long MidiaSize { get; set; } 
} 

Мой регистр Мидия:

[HttpPost] 
public JsonResult AtualizarMidias(IEnumerable<HttpPostedFileBase> arquivos, IEnumerable<string> descricoes, int osId) 
{ 
    var ordermDeServico = _osService.ObterPorIdLazyLoad(osId); 

    foreach (var file in arquivos) 
    { 

     string targetFolder = HttpContext.Server.MapPath("~/Content/uploads/"); 
     string targetPath = Path.Combine(targetFolder, file.FileName); 


     if (file != null && file.ContentLength > 0) 
     { 

      var itens = arquivos.ToList(); 
      var des = descricoes.ToList(); 
      var index = itens.FindIndex(c => c.FileName == file.FileName); 
      var midiaViewModel = new MidiaViewModel 
      { 
       MidiaType = file.ContentType, 
       MidiaNome = file.FileName, 
       MidiaPath = targetPath, 
       MidiaSize = file.ContentLength, 
       MidiaDescricao = des[index].ToString(), 
       MidiaBytes = converterArquivo(file) 
      }; 

      var midia = Mapper.Map<MidiaViewModel, Midia>(midiaViewModel); 
      midia.OsId = ordermDeServico.OSId; 
      file.SaveAs(targetPath); 
      _midiaService.Salvar(midia); 
     } 
    } 

    return Json(new { resultado = true }, JsonRequestBehavior.AllowGet); 
} 

И где я сделать вызов моей угловой $ объем:

[HttpPost] 
public string getMidiasOS(int idOS) 
{ 
    var getMidias = _midiaService.ObterMidiaPorIdOs(idOS); 
    List<MidiaAngularViewModel> midiaNova = new List<MidiaAngularViewModel>(); 


    foreach (var midia in getMidias) 
    { 

     midiaNova.Add(new MidiaAngularViewModel 
     { 
      Id = midia.MidiaId, 
      Path = midia.MidiaPath, 
      Tipo = midia.MidiaType, 
      Descricao = midia.MidiaDescricao, 
      MidiaBytesString = Convert.ToBase64String(midia.MidiaBytes), 
      Nome = midia.MidiaNome 
     }); 
    } 

    return JsonConvert.SerializeObject(midiaNova); 
} 

EDIT

Ребята, я решил мой проблема с использованием темы Ameni в следующей ссылке: download file using angularJS and asp.net mvc

Все, что мне нужно сделать, это создать метод Post в теме Ameni и загрузке по функции пути.

ответ

1

Просто добавьте/используйте атрибут download, и все будет в порядке. Подробнее об атрибуте загрузки можно узнать по адресу w3c download documentation.

<a href="{{midia.path}}" download="filename">Download</a> 
+0

Этот подход дает мне сетевую ошибку при загрузке файла. –

+0

@ FábioCarvalho Похоже, что есть ошибка в вашем филите на вашей стороне. Атрибут загрузки работает хорошо. Вы должны иметь доступ к своей файловой ссылке, прямо мимо нее в своем браузере. – lin

+0

Я обновляю свой вопрос, вы можете посмотреть на него? Я не знаю, что я делаю неправильно. :( –

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