2017-02-06 7 views
0

Я пытаюсь преобразовать некоторый html/javascript в Angular 2, но я, кажется, не получаю данные blob в мое сообщение от моего узла websocket до моего Angular 2 Observable.Я, кажется, не получаю данные blob в своем сообщении от моего узла websocket до моего Angular 2 Observable

Сообщения с моего хоста websocket, кажется, отправляют текстовые сообщения просто отлично, но сообщения blob отображаются как пустые объекты.

Вот некоторые из моего кода: данные

import { Injectable } from '@angular/core'; 
import { Observable } from 'rxjs/Rx'; 
import { Component } from '@angular/core'; 

@Injectable() 
export class WebSocketService { 
    private websocket: any; 
    public sendMessage(text:string){ 
    this.websocket.send(text); 
    } 
    public GetInstanceStatus(): Observable<any>{ 
    this.websocket = new WebSocket("ws://localhost:8080/something"); 
    return Observable.fromEvent(this.websocket,'message').map(res=>res); 
    } 
    sendText(json: Object) { 
    this.websocket.send(json); 
    } 
    sendBinary(bytes: any) { 
    this.websocket.send(bytes); 
    } 
} 

@Component({ 
    selector: 'my-app', 
    templateUrl: 'app/app.component.html' 
}) 
export class AppComponent { 
    constructor(
    private wss: WebSocketService 
){ 
    this.wss.GetInstanceStatus().subscribe((result) => { 
     console.log("received: " + result); 
     var foo = result.data; 
     for(var name in foo) { 
     console.log(name + "::" + foo[name]) 
     } 
    }); 
    } 
} 

ответ

0

Blob должны были бы быть разобраны по-разному. Http служба ANGULAR возвращает в ResponseData объект, который имеет .blob() метод на нем, но, к сожалению, нет поддержки WebSockets еще:/

Вы бы разобрать его по старинке, с помощью FileReader:

public GetInstanceStatus(): Observable<any>{ 
var reader = new FileReader(); 
this.websocket = new WebSocket("ws://localhost:8080/something"); 

return Observable.fromEvent(this.websocket,'message') 
    .map((res) => { 
    // logic here for determining if res is a blob based on headers 
    // here is what you'd do for a blob though: 
    reader.readAsArrayBuffer(res.body) 
    }); 
} 

Реализация этого будет варьироваться в зависимости от вашей полезной нагрузки. Метод readAsArrayBuffer будет анализировать данные в виде массива; это может быть не то, что вам нужно. Ознакомьтесь с документами MDN по адресу FileReaderhere.

Главное, что вы захотите сделать некоторую логику отображения, чтобы увидеть, следует ли ее анализировать как blob или нет и вернуть ее таким образом.