générer csv à partir de mvc, web api httpresponse et la recevoir par angularjs pour le télécharger

Je suis en train de générer un fichier CSV à partir de mon api web et de recevoir par angularjs. J'ai une API contrôleur comme ci-dessous:

 [HttpPost]
    public HttpResponseMessage GenerateCSV(FieldParameters fieldParams)
    {
        var output = new byte[] { };
        if (fieldParams!= null)
        {
            using (var stream = new MemoryStream())
            {
                this.Serialize(fieldParams, stream);
                stream.Flush();
                output = stream.ToArray();
            }
        }
        var result = new HttpResponseMessage(HttpStatusCode.OK) { Content = new ByteArrayContent(output) };
        result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
        result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
        {
            FileName = "Fields.csv"
        };
        return result;
    }

Dans mon angularjs, j'ai ceci:

$scope.save = function () {
        var csvInput= extractDetails();

        //File is an angular resource. We call its save method here which
        //accesses the api above which should return the content of csv
        File.save(csvInput, function (content) {
            console.log(content);

            //only creates a csv file with "[object Object]" written in it
            var hiddenElement = document.createElement('a');
            hiddenElement.href = 'data:text/csv;charset=utf-8,\uFEFF' + encodeURI(content.Parameters);
            hiddenElement.target = '_blank';
            hiddenElement.download = 'myFile.csv';
            hiddenElement.click();
        });
    };

Permet de dire par exemple, dans mon API contrôleur, le contenu de la réponse est

sortie

{byte[152]}

[0]: 83

[1]: 101

[2]: 44

[3]: 67

[4]: 10

Lorsque je reçois ce dans angularjs et j'ai mis la valeur de content dans le journal de la console (chrome), c'est ce que j'obtiens:

{Paramètres: Tableau[1], $promesse: Objet, $résolu: true, $get: function, $économisez: fonction...}

0:"S"

1: "e"

2: ","

3: "C"

4: "↵"

$promesse: objet

$résolu: true`

  1. Pourquoi le content reçu dans le angularjs contenir des caractères
    déjà au lieu d'un octet de tableau?
  2. Comment puis-je contrôler la content de telle manière que je n'utilise que des
    le csv des données et la suppression de $promise et $resolved? Pourquoi sont-ils inclus dans la première place? Comment les supprimer?
  3. Quelle est la bonne façon de générer un fichier csv si ce que je fais est
    de mal? 😐

OriginalL'auteur raberana | 2013-11-30