2017-09-04 5 views
7

Próbuję utworzyć grupę kanałów ze zdjęciem okładki,SendBird tworzyć GroupChannel z pliku jako osłony

this.sendBirdInstance.GroupChannel.createChannelWithUserIds(userIds, true, this.groupName, this.groupPhotoFile, '', function (createdChannel, error) { 
... 
} 

Zgodnie z dokumentacją mogę dodać adres URL lub plik

coverUrl : plik lub adres URL obrazu okładki, który można pobrać do interfejsu użytkownika do .

Ale podczas dodawania pliku, ja zawsze się: "SendBirdException", code: 800110, message: "Invalid arguments."

Czy istnieje sposób, aby utworzyć grupę z pliku zamiast url (ponieważ chcę użytkownika, aby przesłać plik)?

Dzięki,

+0

Którą wersję zestawu SDK używasz? – David

+0

Używam wersji 3.0.40 –

+0

Czy jesteś szczęśliwszy używając [Platform API] (https://docs.sendbird.com/platform#open_channel_3_create_a_channel)? Zauważ, że, jak możesz przeczytać w dokumentach, musisz wysłać [Multipart request] (https://docs.sendbird.com/platform#quick_start_4_multipart_requests). Jeśli możesz wysłać plik za pomocą REST API, być może możliwe jest zastąpienie sprawdzenia js, które zwraca błąd 800110. – David

Odpowiedz

3

Jak już doświadczony (widziałem, że stworzyliśmy issue in GitHub kilka dni temu) wsparcie SendBird jest trochę niewiarygodne.

Fakt, że oferują one just a minified version ich SDK JavaScript (który osobiście uważam za bardzo słaby) pomaga albo.

Zresztą mogę odizolować createChannelWithUserIds funkcję:

! function (e, n) { 
    // ... 
}(this, function() { 
    // ... 
    var h = function (e) { 
     for (var n in e) if (e.hasOwnProperty(n)) return !1; 
     return Array.isArray(e) ? JSON.stringify(e) === JSON.stringify([]) : JSON.stringify(e) === JSON.stringify({}) 
    }, 
    // ... 
    A = function() { // it returns SendBird function 
     // ... 
     var w = function (e) { // w is this.GroupChannel 
      // ... 
      w.createChannelWithUserIds = function() { 
       // ... 
       // here comes the param validation (I've added spaces for a better lecture): 
       if (!Array.isArray(e) || "boolean" != typeof n || "string" != typeof t && null !== t && void 0 !== t || "string" != typeof r && h(r) && null !== r && void 0 !== r || "string" != typeof a && null !== a && void 0 !== a || "string" != typeof i && null !== i && void 0 !== i) return void U(null, new p("Invalid arguments.", J.INVALID_PARAMETER), s); 
       // It will return "Invalid arguments." if any of the conditions evaluates to true  
       // ... 
      } 
     } 
    } 
    return function() { 
     // ... 
    }().SendBird 
}); 

Używasz funkcję tak:

createChannelWithUserIds(o, n, t, r, a, s); 

Więc czwarty parametr (r) jest coverURL: plik z pokrywą obraz (this.groupPhotoFile);

Jego walidacja jest w zasadzie powiedzieć, że:

"string" != typeof r // if `r` is not a string (a URL) 
&& h(r)     // and the returned value of function h(r) is true 
&& null !== r   // and it is not null 
&& void 0 !== r   // and it is not undefined 

że parametr jest nieprawidłowy.

Plik nie jest ciągiem znaków, nie jest pusta i nie niezdefiniowane, więc wszystko sprowadza się do h() funkcję:

var h = function (e) { 
    for (var n in e) if (e.hasOwnProperty(n)) return !1; 
    return Array.isArray(e) ? JSON.stringify(e) === JSON.stringify([]) : JSON.stringify(e) === JSON.stringify({}) 
} 

Funkcja powyżej czeku na pierwszym miejscu, jeśli obiekt ma żadnego majątku, co jest członkiem samego obiektu (tj. nie należących do łańcucha prototypów). Następnie, jeśli nie ma żadnej własnej właściwości, sprawdza, czy obiekt/tablica stringify jest równy pustemu obiektowi/tablicy.

Nie mogę powiedzieć, co jest intencją twórców podczas sprawdzania poprawności plików choć tej funkcji, ale standard obiektu File:

  • ma właściwości w łańcuchu prototypów, ale nie bezpośrednio przypisane do instancji, więc pierwszym warunkiem jest true.
  • kiedy stringify zwraca pusty obiekt we wszystkich głównych przeglądarkach w dzisiejszych czasach (it was not always like so), więc drugim warunkiem jest również true.

Jak widzieliśmy wcześniej, musimy h() wrócić false: sprawdzanie poprawności nie powiedzie się, jeśli zwraca true.

Aby rozwiązać ten problem można zmienić funkcję h() do czegoś podobnego:

var h = function(e){ 
    return !(e instanceof File); 
    // or return e.constructor != File; 
    // or return Object.getPrototypeOf(e) != File.prototype); 
    // or return e.__proto__ != File.prototype) 
    // or return e.constructor.prototype != File.prototype) 
} 

ale nie będę z nim bałagan. Może być stosowany w przyszłych wersjach o innym celu.

Dlatego najlepiej jest, aby zmienić funkcję createChannelWithUserIds() do:

  • usunąć wywołanie funkcji h() z walidacji.
  • wymienić go na wezwanie do własnego walidacji plików

Aby to zrobić, można zastąpić funkcję w SendBird przykład:

var sb = new SendBird({ appId: ... }); 

sb.GroupChannel.createChannelWithUserIds = function(){ ... }; 

Ale to nie ma gwarancji, do pracy i może pęknąć w przyszłych wydaniach, więc po prostu edytowałbym plik SendBird.min.js. Innymi słowy, należy wymienić:

if(!Array.isArray(e)||"boolean"!=typeof n||"string"!=typeof t&&null!==t&&void 0!==t||"string"!=typeof r&&h(r)&&null!==r&&void 0!==r||"string"!=typeof a&&null!==a&&void 0!==a||"string"!=typeof i&&null!==i&&void 0!==i)return void U(null,new p("Invalid arguments.",J.INVALID_PARAMETER),s); 

z:

if(!Array.isArray(e)||"boolean"!=typeof n||"string"!=typeof t&&null!==t&&void 0!==t||"string"!=typeof a&&null!==a&&void 0!==a||"string"!=typeof i&&null!==i&&void 0!==i)return void U(null,new p("Invalid arguments.",J.INVALID_PARAMETER),s); 

w obecnej wersji (v3.0.41) znajdziesz dwa zbiegi okoliczności kodu powyżej: jeden dla createChannel i inne dla createChannelWithUserIds, możesz wymienić oba.

Oczywiście edycja pliku .js jest denerwująca, ponieważ trzeba będzie uważać, aby zastąpić kod za każdym razem, gdy uaktualnisz SendGrid. Można utworzyć automatyczne zadanie wewnątrz rurociągu CI, aby zrobić to za Ciebie, pomyślał.

Mam nadzieję, że programiści SendGrid potwierdzą twój problem i naprawią go w przyszłej wersji.

+0

Otrzymuję "Nieprawidłowe argumenty". –

+0

Wow it works !! Opowiem o tym błędzie: D Wielkie dzięki –

+0

Miło słyszeć, że Dany! Napiszę to później jako właściwą odpowiedź, więc jest to przydatne dla większej liczby osób. – David

Powiązane problemy