2011-09-07 12 views
5

Sunucumda bir görüntü dosyası oluşturmak için PHP kullanıyorum. Şimdi bunu bir POST üzerinden üçüncü tarafın sunucusuna yüklemem gerekiyor. Bunu yapmak için bir sunucu tarafı cURL betiği kullanmak daha kolay olurdu, ancak istemcim üzerinden bunu yapmak zorundayım çünkü istemci ile üçüncü taraf sunucu arasındaki aktif oturum bağlamında yüklenmesi gerekiyor. Soru şu ki bunu en kolay nasıl başarabilirim?Javascript kullanarak sunucumdaki bir uzak dosyayı bir üçüncü tarafa yüklemek için

  1. bir HTML form veya AJAX çağrısı söylemek kullanmak ve ona URL'yi vererek gelen görüntü yüklemek mümkün mü? Bir şey üçüncü taraf arka uç URL'leri kabul etmiyor, bir web formu aracılığıyla bir yükleme olsaydı sanki temsil edilmesi gerekiyor ...

  2. Bu mümkün değilse, bir AJAX kullanmayı düşünüyordum Resmi indirmek ve içeriği bir değişkene kaydetmek için arayın. Ardından, formun içinde yerel bir dosya seçilmiş gibi görüntü içeriğini yükleyen bir form oluşturun. Bunu nasıl yapmalıyım?

    ------WebKitFormBoundary3ygta7rqeBm1krBO 
    Content-Disposition: form-data; name="MAX_FILE_SIZE" 
    
    10000000 
    ------WebKitFormBoundary3ygta7rqeBm1krBO 
    Content-Disposition: form-data; name="uploadedfile"; filename="test.jpg" 
    Content-Type: image/jpeg 
    
    
    ------WebKitFormBoundary3ygta7rqeBm1krBO-- 
    

    bu formatta gibi bir dize oluşturmak ve sonra da bu teslim etmelidir:

Ben bir web formu aracılığıyla bir dosya yükleyin ve HTTP başlıkları bakmak

böyle bir şey görmek gönderiliyor Bir AJAX çağrısı aracılığıyla veri olarak? Gerçek ikili görüntü verilerini nereye yerleştirebilirim? Sanırım Chrome geliştirici araçları bu verileri bastırıyor ...

Herhangi bir işaretçi için teşekkürler.

cevap

1

Sanırım söyledikleriniz en kolay gibi görünüyor, sunucunuz aracılığıyla üçüncü tarafa yükleyin. Kullanıcının oturumundan PHP betiğinizden herhangi bir şey almanın bir yolu var mı? Aksi halde, istemciye (belki de AJAX yoluyla), sunucunun oluşturduktan sonra base64 gibi kodlanmış bir biçimde görüntü göndermeyi deneyebilirsiniz, ardından dosyayı 3. tarafa göndermek için özel bir XHR oluşturun.

var boundary = this.generateBoundary(); 
var xhr = new XMLHttpRequest; 

xhr.open("POST", this.form.action, true); 
xhr.onreadystatechange = function() { 
    if (xhr.readyState === 4) { 
     alert(xhr.responseText); 
    } 
}; 
var contentType = "multipart/form-data; boundary=" + boundary; 
xhr.setRequestHeader("Content-Type", contentType); 

for (var header in this.headers) { 
    xhr.setRequestHeader(header, headers[header]); 
} 

// here's our data variable that we talked about earlier 
var data = this.buildMessage(this.elements, boundary); 

// finally send the request as binary data 
xhr.sendAsBinary(data); 

("XMLHttpRequest nesnesi" bölümünde aşağıda) daha fazla bilgiye buradan:
http://igstan.ro/posts/2009-01-11-ajax-file-upload-with-pure-javascript.html

.. İşte bir örnek
İlgili konular