2011-09-07 29 views
5

Tôi đang sử dụng PHP để tạo tệp hình ảnh trên máy chủ của mình. Bây giờ tôi cần phải tải lên thông qua POST để một máy chủ của một bên thứ 3. Dễ nhất là sử dụng kịch bản lệnh cURL phía máy chủ để thực hiện điều đó nhưng tôi phải thực hiện nó thông qua ứng dụng khách của tôi, vì nó cần được tải lên trong ngữ cảnh của phiên hoạt động giữa máy khách và máy chủ của bên thứ ba. Câu hỏi đặt ra là làm thế nào tôi có thể đạt được điều này dễ nhất?sử dụng Javascript để tải lên tệp từ xa trên máy chủ của tôi tới máy chủ của bên thứ ba

  1. Có thể sử dụng biểu mẫu HTML hoặc gọi AJAX và tải hình ảnh lên bằng cách cho URL đó không? Vấn đề là bên thứ ba trở lại kết thúc không chấp nhận URL, nó cần phải được đại diện như thể nó là một tải lên thông qua một hình thức web ...

  2. Nếu điều đó là không thể, tôi đã nghĩ đến việc sử dụng AJAX gọi để tải xuống hình ảnh và lưu nội dung vào một biến. Sau đó, tạo biểu mẫu tải lên nội dung của hình ảnh như thể một tệp cục bộ được chọn trong biểu mẫu. Làm thế nào tôi nên thực hiện điều đó?

Khi tôi tải lên một tập tin thông qua một hình thức web và nhìn vào các tiêu đề HTTP được gửi tôi thấy một cái gì đó như thế này:

------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-- 

Tôi có nên tạo một chuỗi như ở định dạng này và sau đó nộp như dữ liệu thông qua cuộc gọi AJAX? Tôi đặt dữ liệu hình ảnh nhị phân thực tế ở đâu? Tôi đoán các công cụ dành cho nhà phát triển Chrome sẽ chặn dữ liệu đó ...

Cảm ơn mọi con trỏ.

Trả lời

1

Tôi nghĩ đơn giản nhất có vẻ là những gì bạn nói, tải nó lên bên thứ 3 thông qua máy chủ của bạn. Có cách nào để bạn có thể nhận được bất cứ điều gì từ phiên của người dùng thông qua kịch bản PHP của bạn?

Nếu không, bạn có thể thử gửi lại cho khách hàng (có lẽ qua AJAX) hình ảnh ở một số định dạng được mã hóa, như base64, sau khi máy chủ của bạn tạo, sau đó tạo XHR tùy chỉnh để gửi tệp cho bên thứ ba. .. đây là một ví dụ:

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); 

Xem thêm thông tin tại đây (dưới "Đối tượng XMLHttpRequest" mục):
http://igstan.ro/posts/2009-01-11-ajax-file-upload-with-pure-javascript.html

Các vấn đề liên quan