application/octet-stream, как?

  • Автор темы Автор темы ibred
  • Дата начала Дата начала

ibred

Client
Регистрация
04.04.2015
Сообщения
3 835
Реакции
3 564
Баллы
113
Перед тем, как создать эту тему я воспользовался поиском, но к сожалению ничего не нашел.
Как я понял, чтобы отправить JPEG через application/octet-stream, необходимо файл перевести в бинарный вид, но к сожалению, никак не могу придти к решению.

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

Код:
Развернуть Свернуть Копировать
--psaEzEdsaBAjEFzNY6HaBzuH8
Content-Disposition: form-data; name="upload_id"
Content-Type: text/plain

1443455706
--psaEzEdsAjEFzNY6HaBzuH8
Content-Disposition: form-data; name="photo"; filename="g0xUOAdawbT-c8o3jJXtZgLD8z.jpg"
Content-Type: application/octet-stream

������������������������
��������������
������������
 
по идее вместо кракозябр просто нужно подставить полный путь к файлу, нет?
 
Покажите как экшен настроен, что там за запрос
 
Тоже интересует данный вопрос. Как перевести путь картинки (читай саму картинку) в код для отправки через запрос?
Стандартный экшин Файлы для загрузки на сервер - в данном случает не обрабатывает, а просто вставляет путь до картинки типа "D:\new.jpg".
 
В запросе просто путь картинки нужен. экшен сам сконвертит картинку
 
В запросе просто путь картинки нужен. экшен сам сконвертит картинку
Значит это баг зенки.
Не конвертит он и все тут. Просто выдает локальный путь до картинки. В этом и проблема.
 
как вы это определяете. приложите скрин
 
ZgIKYDW.jpg

Первым делом объявляю переменную с картинкой по адресу "D:\new.jpeg"
Далее использую стандартный экшин "Файлы для загрузки"
Затем отправляю пост с данной переменной в поле "Данные", с предустановленным "типом данных" - "application/octet-stream"
Пробовал по другим типам данных - сервер посылает категорически.
С таким типом данных - говорит что нету картинки.

Если делать через пост запрос то получается так:
2Fdtt3R.jpg


А если мы делаем через браузер:
zf8zTZd.jpg


Вот так и определю.. =(
 
execut0r, по сути octet stream тоже самое что и мультипарт, менять пробовал?
 
да, тут не получится как с мультипартом кажется. спрошу у разработчиков, отпишусь как получу ответ.
 
  • Оценить
Реакции: execut0r
На последнем билде должно работать

если указан content type application/octet-stream то программа будет пытаться указанные данные интерпретировать как путь к файлу
 
  • Оценить
Реакции: ibred
Ап.

Тоже столкнулся с
Content-Type: application/octet-stream
картинку-то без проблем загрузил, а вот с видео застрял..

в-общем видео режется на части бобайтово равными кусками (последний кусок остаток поменьше), и шлется несколькими такими запросами параллельно.

диапазоны байтов прописываются в заголовках запросов, их я рассчитал.
Как порезать файл с заданным размером байт, чтобы в каждый запрос запихать свою часть? Или может есть более подходящее решение?

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

на скрине mp4 файл весит 77 Мб (77`402`186), режется на куски по 8 Мб (8`388`608 )

Screenshot_1.png
X-Uploading-Mode: parallel
 
Это второй POST запрос, и так далее, всего 10 запросов по 10 частей файла..

Screenshot_2.png
X-Uploading-Mode: parallel
 
Вычисление кол-ва частей, переменная parts:
Развернуть Свернуть Копировать
double number = double.Parse(project.Variables["fileSize"].Value); //переменная с размером файла
double onepart = 8388608 ; //размер одной части
double result = number/onepart; //вычисление количества частей
return System.Math.Ceiling(result); //округление в большую сторону

Разрезать файл:
Развернуть Свернуть Копировать
long parts = Convert.ToInt32(project.Variables["parts"].Value); //кол-во частей, на которые надо резать
using (FileStream fs = new FileStream(project.Variables["filePath"].Value, FileMode.Open, FileAccess.Read)) {
    long partSz = fs.Length / parts; //размер одной части
    byte[] buff;
    bool mod = fs.Length % parts == 0; //все части одного размера
        for (int i = 0; i < parts; i++) {
            using (FileStream pStream = new FileStream(string.Format(project.Directory+"\\tmp\\{0}"+project.Variables["fileExtension"].Value, i), FileMode.Create, FileAccess.Write)) {
                buff = new byte[i == parts - 1 && !mod ? fs.Length - (parts - 1) * partSz : partSz];
                fs.Read(buff, 0, buff.Length);
                pStream.Write(buff, 0, buff.Length);
                }
                buff = null;
            }
    }
 
  • Оценить
Реакции: zennoX и RoyalBank
Разрезать файл:
Развернуть Свернуть Копировать
long parts = Convert.ToInt32(project.Variables["parts"].Value); //кол-во частей, на которые надо резать
using (FileStream fs = new FileStream(project.Variables["filePath"].Value, FileMode.Open, FileAccess.Read)) {
    long partSz = fs.Length / parts; //размер одной части
    byte[] buff;
    bool mod = fs.Length % parts == 0; //все части одного размера
        for (int i = 0; i < parts; i++) {
            using (FileStream pStream = new FileStream(string.Format(project.Directory+"\\tmp\\{0}"+project.Variables["fileExtension"].Value, i), FileMode.Create, FileAccess.Write)) {
                buff = new byte[i == parts - 1 && !mod ? fs.Length - (parts - 1) * partSz : partSz];
                fs.Read(buff, 0, buff.Length);
                pStream.Write(buff, 0, buff.Length);
                }
                buff = null;
            }
    }
Второй код завершается с ошибкой, в лог ничего не пишет.. (PM 5.47.0.0)
и я так понимаю он части сохраняет в файлы? Можно ли сохранять в переменные?
 
На 5 версии, к сожалению, я не работаю.
Да, части сохраняет в файлы в виде 0.mp4, 1.mp4, 2.mp4 и тд.
Я потом беру все содержимое папки, в которой сохранены отрезки и добавляю в список ZP.
 
  • Оценить
Реакции: zennoX
На 5 версии, к сожалению, я не работаю.
Да, части сохраняет в файлы в виде 0.mp4, 1.mp4, 2.mp4 и тд.
Я потом беру все содержимое папки, в которой сохранены отрезки и добавляю в список ZP.
Понял, попробую на 7ке, спасибо!
 

Кто просматривает тему: (Всего: 0, Пользователи: 0, Гости: 0)