[PHP/SOAP/ZF] Uploaden bestand/afbeelding

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • storeman
  • Registratie: April 2004
  • Laatst online: 18:51
Ik ben bezig een SOAP-service te ontwikkelen met behulp van het Zend Framework. Nu wil ik dat er via de SOAP dienst ook een afbeelding geupload kan worden.

Ik kan hier echter niets over vinden in ZF/via google. Ik heb dus het idee dat dit niet kan via een standaard manier.

Nu zou ik natuurlijk mbv een base64 encoding de data gewoon kunnen versturen, maar dit vind ik geen mooie oplossing. De bedoeling is dat diverse applicaties met de API kunnen ouwehoeren, dus ik houd me liever aan de protocol standaarden.

Is het een idee een andere manier te gebruiken voor dit probleem? REST? XML-RPC? In principe heb ik een aantal API classes geschreven, dus ik zou ook een andere manier van communicatie kunnen ondersteunen.

Wie geeft me een trap in de goede richting?

"Chaos kan niet uit de hand lopen"


Acties:
  • 0 Henk 'm!

  • rhodium
  • Registratie: Augustus 2003
  • Laatst online: 19:01
volgens mij is daarvoor iets als SOAP attachments. Nu heb ik nog nooit met SOAP gewerkt, maar wel met google. Maar is SOAP hiervoor wel bedoeld?

Acties:
  • 0 Henk 'm!

  • storeman
  • Registratie: April 2004
  • Laatst online: 18:51
Dat twijfel ik dus ook aan, of SOAP hiervoor wel het juiste middel is. Ik kan hierover niets vinden in de ZF_Soap component, zowel aan de client als aan de server kant is dit niet belicht.

Wellicht moet ik dus kiezen voor een ander protocol wat hier wel ondersteuning voor heeft. Wat is dan het meest gebruikt? Het is de bedoeling dat diverse applicaties met deze service gaan praten (Android/Iphone/Phone7)

"Chaos kan niet uit de hand lopen"


Acties:
  • 0 Henk 'm!

Verwijderd

Er is wel een protocol voor, DIME heet dat volgens mij maar dat is iets dat Microsoft bedacht heeft.

Ook is het mogelijk een attachment mee te sturen, maar dit lijkt erg veel op het MIME protocol dat ook voor email gebruikt wordt, dit is dus ook base64.

Wat ik zelf meestal doe is het aanmaken van een File complexType in de WSDL zoals :

XML:
1
2
3
4
5
6
7
8
9
10
11
    <xsd:complexType name="File">
        <xs:sequence>
            <xs:element minOccurs="0" maxOccurs="unbounded" name="filename" nillable="false" type="xsd:string"/>
            <xs:element minOccurs="0" maxOccurs="unbounded" name="mimetype" nillable="false" type="xsd:string"/>
            <xs:element minOccurs="0" maxOccurs="unbounded" name="filedata" nillable="false" type="xsd:string"/>
        </xsd:sequence>
    </xs:complexType>
    <xsd:complexType name="FileArray">
        <xs:sequence>
            <xs:element minOccurs="0" maxOccurs="unbounded" name="files" nillable="false" type="tns:File[]"/>
    </xsd:complexType>


Dit is in principe kun je de data als base64 of een ander simpele string versturen. Binnen mijn client heb ik dan een factory method die files omzet naar een SoapFile object die simpelweg een saveTo($filename) method heeft.

Deze methode is ook in allerlei andere talen te gebruiken, zelf heb ik dit gebruikt voor een C# -> PHP koppeling.

Mocht je gaan voor een JSON achtige oplossing, dan is dit ook vrij makkelijk te op deze manier op te zetten.

Bij het gebruik van rest kun je natuurlijjk gewoon gebruik maken van standaard file upload gebruiken in je request.

Acties:
  • 0 Henk 'm!

Verwijderd

Base64 is toch wel de standaard voor bestandsuitwisseling met webservices omdat je dan een bestand gewoon in een XML enveloppe kan meesturen. Ik zou dus voor base64 gaan, elke programmeertaal ondersteund ook conversie van en naar base64.

Acties:
  • 0 Henk 'm!

  • storeman
  • Registratie: April 2004
  • Laatst online: 18:51
Okee, bedankt. Implementatie van base64 is inderdaad kipsimpel en behoudt mooi compatibiliteit met het XML format. Eventueel kan ik nog een ander protocol gaan ondersteunen, maar dat lijkt dus geen prioriteit te hebben.

"Chaos kan niet uit de hand lopen"

Pagina: 1