Gmail, как загрузка файлов с помощью jQuery - PullRequest
21 голосов
/ 02 апреля 2009

Я хотел бы загружать файлы так же, как это делает почта Google. Я хотел бы использовать jQuery и PHP, чтобы сделать это в любом случае получить индикатор выполнения и т. Д .?

Здесь я добавил видео о том, как это делает Google. http://dl.getdropbox.com/u/5910/Jing/2009-04-02_1948.swf

Нет вспышки, нет Perl или CGI, пожалуйста ..

Полагаю, я могу жить без индикатора прогресса, сейчас я на самом деле ищу информацию о плагинах jquery или о том, что мне нужно посмотреть

Ответы [ 11 ]

20 голосов
/ 05 марта 2010

Странно, что люди говорят, что gmail не использует flash, когда вы можете просто увидеть файл swf в интерфейсе gmail. Попробуйте щелкнуть правой кнопкой мыши на «Прикрепить файл». Это то, что позволяет одновременно загружать несколько файлов.

7 голосов
/ 02 апреля 2009

Проще всего было бы использовать SWFUpload , это маленькая кнопка, написанная на Flash, со всеми хуками для управления ею в JS. Очень прост в использовании и хорошо работает с PHP

но, если вы действительно хотите, чтобы это был чистый JS, вам понадобится некоторая помощь от сервера. в частности, вам нужно начать загрузку и периодически запрашивать сервер о том, как идут дела. к сожалению, обработка загрузки PHP не получает никаких уведомлений, пока загрузка не закончится. Вы должны заменить это чем-то другим. есть несколько чистых загрузчиков JS, которые включают пример кода сервера Perl именно из-за этого.

IOW: JS и PHP не (полностью) не сокращают его. либо добавьте флэш-память к клиенту, либо лучше обработчик загрузки на сервере.

4 голосов
/ 10 февраля 2011

на мой взгляд отличная статья на эту тему: http://robertnyman.com/html5/fileapi-upload/fileapi-upload.html

к сожалению, отсутствует поддержка IE и Opera, но, надеюсь, это изменится.

3 голосов
/ 02 апреля 2009

Uploadify - еще одна кнопка загрузки SWF (извините), использующая jquery. Та же идея, что и у Хавьера.

2 голосов
/ 02 апреля 2009

PHP не поддерживает отчеты о ходе загрузки напрямую. Таким образом, нет способа прочитать статус загрузки обратно. Тем не менее, существует патч , который может работать. Я еще не пробовал.

1 голос
/ 31 октября 2011

Может быть, вы могли бы использовать PlUpload. Он поддерживает множество типов и обладает широкими возможностями настройки. Вы можете посмотреть демоверсии на сайте. На домашней странице он также показывает, что он поддерживает на домашней странице, и имеет механизм отката.

http://www.plupload.com/

Редактировать: он доступен как плагин jQuery.

1 голос
/ 08 января 2010

... gmail использует iFrame со стилем отображения: скрытый; затем, когда вы загружаете в форму, он отправляет iFrame на URL загрузки. Вспышка не задействована вообще. Единственное, что Google делает со вспышкой в ​​Gmail - это просто шуметь для чатов. И вы должны разрешить это в настройках. Они на самом деле не слишком часто используют флэш-память только потому, что это довольно плохо с точки зрения использования памяти и процессора. Javascript может делать все, что может сделать Flash (в некоторых случаях он работает с большим количеством кода), но Javascript в 99% случаев работает намного быстрее и лучше с памятью.

1 голос
/ 24 мая 2009

GMail использует Flash для загрузки файла в фоновом режиме. SWFUpload - это проект с открытым исходным кодом, который ищет нечто подобное.

0 голосов
/ 20 декабря 2018

В 2018 году веб-сайт, использующий простой JavaScript, может загружать файлы, как это делает Google Mail для почтовых вложений. Один клик может вызвать диалоговое окно обозревателя файлов в веб-браузере. Отдельная кнопка «Отправить» не нужна для начала загрузки. Хитрость заключается в использовании скрытого элемента HTML <input type="file">.

Пример HTML и JavaScript:

<!DOCTYPE html>
<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  <title>File Upload</title>
  <!-- Demo a button to upload files from a local computer to a web server. -->
</head>
<body>
  <input type="file" id="inputFileElement" multiple style="display:none">
  <button id="fileSelectButton">Select some files</button>

  <script>
    const fileSelectButton = document.getElementById("fileSelectButton");
    const inputFileElement = document.getElementById("inputFileElement");

    // When the user presses the upload button, simulate a click on the
    // hidden <input type="file"> element so the web browser will show its
    // file selection dialog.
    fileSelectButton.addEventListener("click", function (e) {
      if (inputFileElement) {
        inputFileElement.click();
      }
    }, false);

    // When the user selects one or more files on the local host,
    // upload each file to the web server.
    inputFileElement.addEventListener("change", handleFiles, false);
    function handleFiles() {
      const fileList = inputFileElement.files;
      const numFiles = fileList.length;
      for (let i = 0; i < numFiles; i++) {
        const file = fileList[i];
        console.log("Starting to upload " + file.name);
        sendFile(file);
      }
    }

    // Asynchronously read and upload a file.
    function sendFile(file) {
      const uri ="serverUpload.php";
      const xhr = new XMLHttpRequest();
      const fd = new FormData();
      xhr.open("POST", uri, true);
      xhr.onreadystatechange = function() {
        if (xhr.readyState == 4 && xhr.status == 200) {
          console.log("Finished uploading: " + xhr.responseText); // handle response.
        }
      };
      fd.append('myFile', file);
      // Initiate a multipart/form-data upload
      xhr.send(fd);
    }
  </script>
</body>
</html>

PHP код:

<?php
if (isset($_FILES['myFile'])) {
    // Example:
    move_uploaded_file($_FILES['myFile']['tmp_name'], "uploads/" . $_FILES['myFile']['name']);
    echo $_FILES['myFile']['name'];
    exit;
}
?>

Это работает в Internet Explorer 11, Edge, Firefox, Chrome, Opera. Этот пример был получен из https://developer.mozilla.org/en-US/docs/Web/API/File/Using_files_from_web_applications

Индикатор выполнения см. Как получить прогресс из XMLHttpRequest

0 голосов
/ 08 января 2012

О том, что Ajax не поддерживает двоичные данные при отправке формы ... существует обходной путь; если вы являетесь jQuery, то вы можете использовать этот плагин формы (от malsup) здесь: http://www.malsup.com/jquery/form/. Я использую его годами ...

Кроме того, plupload кажется многообещающим ... спасибо за это;) Я должен сказать, что это немного громоздко !!!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...