Dateiübergabe in Webservice



  • Ich habe einen REST-Webservice, bei dem ich verschiedene Funktionen definiert habe. Eine dieser Funktionen soll eine Datei entgegennehmen, zum Beispiel ein Bild oder eine PDF-Datei, und es entsprechend verarbeiten. Wenn die Datei ein Bild oder ein Video ist, soll ein Thumbnail erstellt und irgendwo abgelegt werden, bei einem PDF-Dokument soll nur ein Standard-Icon als Thumbnail genommen werden etc.

    Frage: Wie kann der Webservice wissen, was für einen Dateityp ich gerade habe?
    Mein Funktionskopf sieht so aus:

    [WebInvoke(UriTemplate = "UploadFile", Method = "POST")]
    public string UploadFile(byte[] fileContents)
    

    Da die Dateien jeweils anders weiterverarbeitet werden (Bilder werden mit einem anderen Algorithmus transformiert als Videos), muss der Webservice selbst rausfinden, was für eine Datei er hier hat.

    Ich könnte jetzt den Dateinamen als Parameter angeben lassen. Aber das wäre ja redundant. In dem Fall könnte ein Aufrufer des Webservices einfach eine Bilddatei per Bytearray versenden und mir in den Dateinamen "Test.pdf" reinschreiben.

    Und jetzt den Aufbau der Dateien im Byte-Array durchsuchen und eine Typerkennung für jeden Dateityp selbst implementieren ("Wenn diese und diese Bytes an der und der Stelle vorkommen, dann ist es eine PDF-Datei" etc.), kann ja auch nicht Sinn der Sache sein.

    Was muss ich also tun, um herauszufinden, welchen Dateityp mir der Benutzer da überhaupt mitgegeben hat? (Oder zumindest: Welchen Dateityp die Datei auf der Festplatte hat, denn dass man Bildern in Windows einfach die Endung .pdf geben kann, ist mir natürlich klar.)
    Gibt es zum Beispiel eine Klasse, die den Dateinamen und andere vom Bestriebssystem verwaltete Attribute speichert und den Dateiinhalt als Stream bereitstellt, so dass ich einfach so ein Objekt übergeben kann?



  • Schau mal nach Streaming im Konxtes zu WebService/ WCF! Im prinzip wird zuerst der dateiname /extenstion etc. als meta infoes übertragen, danach die daten!


Anmelden zum Antworten