Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > Передача файла multipart/form-data


Автор: mrNote 3.9.2009, 14:37
Всем доброе время суток!

Столкнулся с такой задачей, никак не могу решить :(
требуется передать данные из переменной на сервер в виде файла.
вот мой код:

Код

file = "1234567890";
crlf  = '\r\n';
data =    '---------------------------7d9531710462' + crlf +
        'Content-Disposition: form-data; name="example"; filename="file.txt"' + crlf +
        'Content-Type: text/plain' + crlf + crlf + file + crlf +
        '---------------------------7d9531710462--';

url="upload.php";

req = makeRequest();        
req.open("POST", url, false);
req.onreadystatechange = function() {callBack(req);}
req.setRequestHeader('Content-Type', 'multipart/form-data; boundary=---------------------------7d9531710462');
req.setRequestHeader('Content-Length', data.length);
req.send(data);

function callBack(http_req) {
var PickText, prevDiv;
 if (http_req.readyState == 4) {
  if (http_req.status == 200) {
   Ans = http_req.responseText;
  } else {
   Ans = 'Problem with the request.';
  }
    alert(Ans);
  }
}

function makeRequest() {
    var http_request = false;
    if (window.XMLHttpRequest) {
        http_request = new XMLHttpRequest();
        if (http_request.overrideMimeType) {
        }
    } else if (window.ActiveXObject) {
        try {
            http_request = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            try {
                http_request = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e) { }
        }
    }
    if (!http_request) {
      alert("Error"); return false;
    }
    return http_request;
}


Не хочет работать.... :(

Помогите плиз разобраться...

Автор: bars80080 3.9.2009, 19:23
насколько я знаю, аякс с файлами в принципе не работает

Автор: mrNote 3.9.2009, 21:15
Цитата(bars80080 @ 3.9.2009,  19:23)
насколько я знаю, аякс с файлами в принципе не работает

Так мне с файлами и не надо работать. Данные для передачи содержатся в переменной, которую нужно отправить как файл...

Автор: bars80080 3.9.2009, 23:43
вот вопрос и заключается в том, может ли аякс отправить заголовки симулирующие файл?

насколько я знаю, он принципиально это не может делать. все примеры которые я встречал об отправке файлов без перезагрузки страницы, начинались словами: аякс этого делать не умеет


п.с. надо проверить, может любой аякс-запрос сопровождается заголовками, которые не позволяют обмануть сервер

Добавлено через 45 секунд
но сам по себе вопрос странный. если у вас есть доступ к серверу, то что мешает серверными механизмами записать этот файл из пришедших данных?

Автор: mrNote 4.9.2009, 15:17
В том то все и дело, что нет доступа к принимающей части...

Автор: bars80080 4.9.2009, 15:27
тогда остаётся спросить: а не вирусняк ли вы хотите закинуть?

Автор: mrNote 4.9.2009, 15:43
нет, не вирусняк.... просто фотки.

Автор: bars80080 4.9.2009, 17:27
сделайте обычный загрузчик через скрытый iframe. практика по нему наработана и без всяких заморочек
http://forum.vingrad.ru/forum/topic-271676.html


кстати, как вы собирались считывать с компа пользователя содержимое картинки?

Автор: mrNote 5.9.2009, 14:14
Цитата(bars80080 @ 4.9.2009,  17:27)
кстати, как вы собирались считывать с компа пользователя содержимое картинки?

содержимое картинки планируется держать в переменной

Автор: bars80080 5.9.2009, 21:02
Цитата(mrNote @  5.9.2009,  14:14 Найти цитируемый пост)
содержимое картинки планируется держать в переменной 

не понял. вы её с сервера собираетесь загружать, а потом обратно закачивать через аякс?

Автор: mrNote 6.9.2009, 09:18
нет, переменная будет изначально в скрипте

Автор: bars80080 6.9.2009, 10:00
Цитата(mrNote @  6.9.2009,  09:18 Найти цитируемый пост)
нет, переменная будет изначально в скрипте 

изначально в скрипте, значит загружена с сервера

Добавлено через 49 секунд
послушайте, можете рассказать что вы делаете подробнее. а то я ж прям весь в загадках

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)