0 / 0 / 0
Регистрация: 17.04.2011
Сообщений: 3

XHR + Blob. Не получается выдать клиенту на сохранение файл с новым названием

02.04.2013, 19:07. Показов 1153. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. У меня случилась проблема. Нужно принять через xhr файлик, сохранить его с новым именем и выдать пользователю. После суток мучений, получилась примерно такая картина, но не работает она. Почему, не пойму. В Опере если получает хотя бы картинку через xhr (смотрел через ctrl+shift+i -> Network), в Хроме вообще ничего не получает. Объясните, пожалуйста, новичку, где косяк

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
var fileAPISupport = false; // переменная, возвращающая True/False в зависимости от того, вкл/выкл поддержка технологий file API
if(window.File&& window.FileReader&& window.FileList&& window.Blob){fileAPISupport = true;} // если поддерживается, пишем в значении True
 
if(fileAPISupport == true) {
  var xhr = new XMLHttpRequest(); // Создаем xhr запрос и пишем его в переменную xhr
  xhr.open('GET', 'принимаемая_картинка.jpg', true); // при помощи get открываем по локальной ссылке файл
  xhr.responseType = 'blob'; // отмечаем, что принимаемые данные - blob
  var filesize = xhr.getResponseHeader('Content-Type'); // пишем в переменную 'filesize' объем получаемых данных в байтах
  xhr.onload = function(e) { // когда данные по ссылке загружаются, выполняем следующую функцию
    xhr.onreadystatechange = function() 
    {
    if (xhr.readyState == 4) 
    {
    
    if (this.status == 200) { // если код ответа сервера - 200, то ...
      var blob = this.response; // забиваем в переменную 'blob' полученные данные в формате DOMString
      window.requestFileSystem(TEMPORARY, filesize, function(fs) { // запрашиваем доступ к файловой системе - просим создать временное пространство размером filesize байт, и в положительном случае выполняем следующую функцию 'function(fs)':
          fs.root.getFile('new_name.jpg', {create: true}, function(fileEntry) { // если все ок, создаем файл
              fileEntry.createWriter(function(writer) { // создаем писателя файла
 
              writer.onwrite = function(e) { /* что-то, если записывается */ };
              writer.onerror = function(e) { /* что-то, если не записывается */ };
    
              var bb = new BlobBuilder(); // Создаем новый Blob с именем bb
              bb.append(this.response);   // Присваиваем Blob-у данные, полученные в качестве ответа сервера
 
              writer.write(bb.getBlob('image/jpeg')); // Пишем в создаваемый файл данные из блоба 'bb' типа 'image/jpeg'
              alert(window.URL.createObjectURL(bb)); // Открываем в popup-окне полученный файл по сгенерированной для него уникальной ссылке
 
              }, onError);
          }, onError);
      }, onError);
    }
    }
    }
  };
  xhr.send(); // Отправляем запрос и ждем результата
};
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
02.04.2013, 19:07
Ответы с готовыми решениями:

Сохранение листа книги в новый файл с определенным названием в новую папку с таким же названием в определенной папке
Привет всем профи и любителям! Прошу помочь с написанием макроса. Имеется книга с 2 листами. На лист1 вводятся данные (типа...

Как выдать посетителю файл с заданным названием?
допустим файл хранится в папке с названием abrakadabra.jpg, как его можно выдать с названием krasivaya_roza.jpg ?

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

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
02.04.2013, 19:07
Помогаю со студенческими работами здесь

Выдать запрос на сохранение текста в файл, если TextBox не пуст
Я только начинаю изучать программирование, поэтому не пинайте за нубские вопросы))) В некоторых программах есть информационное окно,...

Vps, xl2tpd(l2tp) - выдать белый адрес клиенту
Приветствую! Задача по работе - выдать нескольким партнерам постоянную статику (провайдер не умеет). Вижу решение: купить vds (kvm, на...

Вершина характеризуется названием и высотой. Выдать название самой высокой вершины
Не имею понятия как её решить!?

Не получается зайти под новым паролем WHM
Народ, очень срочно. Поменял пароль от учётки в WHM, вроде успешно, сейчас пытаюсь по новому паролю зайти в учётку - не пускает: неверные...

Сохранение картинок в поля Blob и отображение в экранных формах
В поле FOTO (тип bloob) таблицы tst записываю картинку в формате JPG m.myfoto=GETPICT() IF !EMPTY(m.myfoto) SELECT tst ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru