Tại sao không chỉ sử dụng XMLHttpRequest()
bằng POST?
function beginQuoteFileUnquoteUpload(data)
{
var xhr = new XMLHttpRequest();
xhr.open("POST", "http://www.mysite.com/myuploadhandler.php", true);
xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xhr.onreadystatechange = function()
{
if (xhr.readyState == 4 && xhr.status == 200)
alert("File uploaded!");
}
xhr.send("filedata="+encodeURIComponent(data));
}
Các kịch bản xử lý tại máy chủ chỉ ghi dữ liệu tập tin vào một tập tin.
EDIT
Tải lên tệp vẫn là bài đăng http có loại nội dung khác. Bạn có thể sử dụng loại nội dung này và tách nội dung của bạn có ranh giới:
function beginQuoteFileUnquoteUpload(data)
{
// Define a boundary, I stole this from IE but you can use any string AFAIK
var boundary = "---------------------------7da24f2e50046";
var xhr = new XMLHttpRequest();
var body = '--' + boundary + '\r\n'
// Parameter name is "file" and local filename is "temp.txt"
+ 'Content-Disposition: form-data; name="file";'
+ 'filename="temp.txt"\r\n'
// Add the file's mime-type
+ 'Content-type: plain/text\r\n\r\n'
+ data + '\r\n'
+ boundary + '--';
xhr.open("POST", "http://www.mysite.com/myuploadhandler.php", true);
xhr.setRequestHeader(
"Content-type", "multipart/form-data; boundary="+boundary
);
xhr.onreadystatechange = function()
{
if (xhr.readyState == 4 && xhr.status == 200)
alert("File uploaded!");
}
xhr.send(body);
}
Nếu bạn muốn gửi dữ liệu bổ sung, bạn chỉ cần tách riêng từng phần với một ranh giới và mô tả các tiêu đề nội dung bố trí và loại nội dung cho từng phần . Mỗi tiêu đề được phân tách bằng một dòng mới và phần thân được tách biệt với các tiêu đề bằng một dòng mới bổ sung. Đương nhiên, tải lên dữ liệu nhị phân trong thời trang này sẽ hơi khó khăn hơn :-)
Chỉnh sửa thêm: quên đề cập, đảm bảo chuỗi ranh giới không nằm trong "tệp" văn bản bạn đang gửi, nếu không nó sẽ được coi là ranh giới.
Nguồn
2010-02-04 09:29:23
tôi nghi ngờ đó là có thể, nhưng câu hỏi thú vị, 1 –
Điều này có vẻ như là giải pháp sai lầm khi vấn đề của bạn (nếu bạn có quyền kiểm soát phía máy chủ). Nếu nội dung của tập tin sẽ được tạo ra từ một chuỗi, tại sao không chỉ POST chuỗi đó và tạo ra các tập tin trên máy chủ (bằng cách sử dụng PHP hoặc bất cứ điều gì)? Nếu bạn đang tải tệp lên đích của bên thứ 3, thì hãy bỏ qua nhận xét này. –
@JonathanJulian, dù thế nào đi nữa, cái này cũng có mùi của hack-value thực sự -), một mẹo tuyệt vời! – nemesisfixx