2017-12-01 2 views
0

Ich habe eine PDF-Datei, die in meinem lokalen Server mit meinem Server-Side-Code generiert wird. Ich möchte eine Anfrage an den anderen Server senden, der POST anfordert. Die POST-Methode als Parameter nehmen Formdata wo Formdata TypenWie kann ich die POST-Anfrage an den anderen Server binden Datei in formdata

ist string und eine andere ist file Typ.

content-type 
form-data 
Body 
 PDF file (file type) 
    string value 
  

Ist es möglich, ohne das Surfen im Speicherort den POST Antrag zu stellen?

Antwort

0

D Ich habe dieses Problem mit einigen Schritten überwunden, da es keine Möglichkeit gibt, das Dateiobjekt vom physischen Standort automatisch auf der Clientseite (im Grunde in js) zu erhalten, außer aus Sicherheitsgründen.

  1. In meinem lokalen Server habe ich einen REST Service erstellt. welche Antwort base64 string der gewünschten Datei.
  2. Als ich die REST api von meinem javaScript anrufen und als Antwort erhalte ich die base64 string. Und dann konvertiere ich es in bytes array und als Blob Objekt und als File Objekt.

    base64 String ==> Byte-Array ==> Blob-Objekt ==> File-Objekt

    var base64 = this.getpdfFromLocal() //get the base64 string 
    var byteArray= this.base64ToByte(base64); 
    var file = this.getFileFromByteArray(byteArray); 
    
    //return the byte array form the base64 string 
    MyApi.prototype.base64ToByte= function(base64) { 
        var binaryString = window.atob(base64); 
        var binaryLen = binaryString.length; 
        var bytes = new Uint8Array(binaryLen); 
        for (var i = 0; i < binaryLen; i++) { 
         var ascii = binaryString.charCodeAt(i); 
         bytes[i] = ascii; 
        } 
        return bytes; 
    }; 
    MyApi.prototype.getFileFromByteArray=function(byteArray) { 
        var blob = new Blob([byteArray]); 
        var file = new File([blob], "resource.pdf"); 
        return file; 
    }; 
    
  3. Schließlich mache ich from data Dateiobjekt mit und fordern Sie die anderen Server REST Web-Services senden.

    var formdata = new FormData(); 
    formdata.append("some_value", "Some String"); 
    formdata.append("file", file); 
    var url = "http://yoururl.com"; 
    var result =$.ajax({ 
        url    : url , 
        type   : 'POST', 
        data   : formdata, 
        contentType  : false, 
        cache   : false, 
        processData  : false, 
        scriptCharset : 'utf-8', 
        async   : false 
    }).responseText; 
    
Verwandte Themen