Загрузите файл с AngularJS + FileSaver.js + .Net MVC

Я пытаюсь скачать файл, который может быть PDF, CVS, Word, JPG или PNG. Для этого я использую angularjs + filesaver.js. не знаю почему, но мои загрузки всегда повреждены.

Кто-то может мне помочь?

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

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

Метод загрузки My File:

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

Моя модель просмотра

открытый класс MidiaView Model { public int MidiaId { get; задавать; }

    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; }
}

Мой регистр Midia:

[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);
}

РЕДАКТИРОВАТЬ

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

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

1 ответ

Решение

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

<a href="{{midia.path}}" download="filename">Download</a>
Другие вопросы по тегам