У меня простая форма:
<input type="hidden" name="MAX_FILE_SIZE" value="2097152" id="MAX_FILE_SIZE"> <input type="file" name="file_upload" id="file_upload" class="picture_main"> <input type="submit" name="upload_picture" id="upload_picture" value="Submit">
Я пытаюсь загрузить ajax:
submit.on("click", function(){ var file = $('#file_upload').val(); uploadImageAjax(file); return false; }); var uploadmageAjax = function(file) { $.ajax({ type: "POST", url: "/test/index/imageupload", data: { 'file': file }, dataType: "json", success: function (data) { console.log(data); } }); }
я вернусь, например, file: "C:\fakepath\weirdan003-10.jpeg"
но я не уверен, что это за fakepath
!?
если бы я делал это только в php, я бы получил изображение следующим образом:
if (isset($_POST['upload_picture']) ) { $data = $formImageUpload->getValues(); $pictureName = $data['picture']; ....
а затем загрузите его.
Так что я хочу выяснить, является ли ajax вызывать POST для этого действия правильным файлом, поэтому я могу загрузить его на диск.
будет $('#file_upload').val();
удерживайте $ _FILE ??
есть идеи?
благодаря
var file = $('#file_upload').val();
Это вернет только путь к файлу на клиентской машине. для причины секретности он возвращается, как c: \ fakepath \ file_name.ext. Если я правильно помню, в некоторых старых браузерах можно было получить реальный путь. Но тем не менее, это не поможет вам получить файл на сервере.
Для загрузки стиля ajax вы можете использовать некоторые из плагинов, которые вы рекомендовали. Или просто используйте плагин jQuery Forms . Он будет очень похож на $.ajax
.
Теперь, когда файл загружен правильно, вы найдете всю необходимую информацию об этом в $_FILES
В вашем случае это будет что-то вроде $_FILES['file_upload']
где 'file_upload' – это имя ввода вашего файла.
Теперь вы можете переместить его из временного хранилища с помощью move_uploaded_file . И делайте все, что хотите, с этим файлом
EDIT: И я вижу, вы используете Zend. Взгляните на это, как работать с элементом FileUpload на стороне сервера. С Zend вы можете использовать методы FileUpload вместо move_uploaded_file
jQuery ajax не поддерживает асинхронные загрузки файлов. См. Файл загрузки jQuery с использованием метода ajax jQuery (без плагинов) .
Если вы хотите использовать загрузку файла ajax, рекомендуется внедрить плагины:
Для клиентской стороны я предлагаю вам использовать плагин.
Для стороны сервера вам нужно будет обработать его для чтения из потока. Я думаю, что есть полный пример (клиентская и серверная сторона) на valums git .