2013-11-19 5 views
2

Сервер ожидает файл html или txt из формы с именем: "websitetopdf". Файл создается динамически на javascript клиента и должен работать только в Chrome.

Это форма, которая должна быть его отправкой:

<form action="send.php" method="post" enctype="multipart/form-data" name="websitetopdf" id="websitetopdf"> 
<input name="localfile" type="file" id="localfile" size="58"> 
<input name="filetype" type="hidden" id="filetype" value="IMG"> 
<input name="source" type="hidden" id="source" value="SOFT"> 
<input name="converternow" type="submit" id="converternow" style="width: 130px; font-weight: bold;" value="Convert to Image"> 
</form> 

Я хочу, чтобы отправить непосредственно в файл send.php, я попытался это:

$("#sender").on("click", function(e) { 
    var xhr = new XMLHttpRequest(); 
    xhr.open("POST", "http://.../send.php", true); 
    xhr.onreadystatechange = function() { 
     if (xhr.readyState == 4) console.log(xhr.responseText); 
    }; 
    xhr.onload = function(e) { 
     if (xhr.status == 200) console.log("uploaded"); //(correctly uploaded) 
     else console.log("Error " + e.status + " occurred uploading your file.<br \/>"); 
    }; 
    var blob = new Blob(['abc123'], {type: 'text/plain'}); 

    var formData = new FormData(); 
    formData.append("localfile", blob); 
    formData.append("filetype", "IMG"); 
    formData.append("source", "SOFT"); 
    xhr.send(formData); 
}); 

Я всегда получаю "это недопустимый файл "с сервера

+0

не переопределяет тип содержимого, для загрузки файлов это имеет значение. – dandavis

+0

Я удалил его, все еще не повезло. – shuji

+0

oh, duh, используйте POST; не заметил, что в первый раз ... вашему серверу также может понадобиться расширение для имени файла, которое вы создаете с помощью FormData ... – dandavis

ответ

2

Он начал работать, когда я добавил имя файла для blob в объекте FormData objec t:

formData.append("localfile", blob, "filename.txt"); 
+1

Если это сработало, возникает проблема с кодом вашего сервера. Параметр 3-го (имени) метода 'append'' FormData' не поддерживается во всех браузерах. Вы не должны полагаться на это. –

+0

ОК спасибо, что я этого не знал, я использую его только в приложении Chrome, так что пока все в порядке. Я предполагаю, что это необходимо для распознавания формата файла перед его возвратом (html или txt в jpg). – shuji

+0

Вы должны идентифицировать сторону файлового сервера с помощью сопоставления магического байта вместо сопоставления с расширением файла. –

Смежные вопросы