application/octet-stream, как?

ibred

Client
Регистрация
04.04.2015
Сообщения
3 835
Благодарностей
3 543
Баллы
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

������������������������
��������������
������������
 

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 707
Баллы
113
по идее вместо кракозябр просто нужно подставить полный путь к файлу, нет?
 

ibred

Client
Регистрация
04.04.2015
Сообщения
3 835
Благодарностей
3 543
Баллы
113

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 707
Баллы
113
Покажите как экшен настроен, что там за запрос
 

execut0r

Client
Регистрация
12.03.2014
Сообщения
259
Благодарностей
270
Баллы
63
Тоже интересует данный вопрос. Как перевести путь картинки (читай саму картинку) в код для отправки через запрос?
Стандартный экшин Файлы для загрузки на сервер - в данном случает не обрабатывает, а просто вставляет путь до картинки типа "D:\new.jpg".
 

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 707
Баллы
113
В запросе просто путь картинки нужен. экшен сам сконвертит картинку
 

execut0r

Client
Регистрация
12.03.2014
Сообщения
259
Благодарностей
270
Баллы
63
В запросе просто путь картинки нужен. экшен сам сконвертит картинку
Значит это баг зенки.
Не конвертит он и все тут. Просто выдает локальный путь до картинки. В этом и проблема.
 

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 707
Баллы
113
как вы это определяете. приложите скрин
 

execut0r

Client
Регистрация
12.03.2014
Сообщения
259
Благодарностей
270
Баллы
63

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

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


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


Вот так и определю.. =(
 

Tuw

Client
Регистрация
07.09.2014
Сообщения
441
Благодарностей
150
Баллы
43
execut0r, по сути octet stream тоже самое что и мультипарт, менять пробовал?
 

execut0r

Client
Регистрация
12.03.2014
Сообщения
259
Благодарностей
270
Баллы
63

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 707
Баллы
113
да, тут не получится как с мультипартом кажется. спрошу у разработчиков, отпишусь как получу ответ.
 
  • Спасибо
Реакции: execut0r

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 707
Баллы
113
На последнем билде должно работать

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

zennoX

Client
Регистрация
05.04.2014
Сообщения
482
Благодарностей
131
Баллы
43
Ап.

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

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

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

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

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

Screenshot_1.png
X-Uploading-Mode: parallel
 

zennoX

Client
Регистрация
05.04.2014
Сообщения
482
Благодарностей
131
Баллы
43
Это второй POST запрос, и так далее, всего 10 запросов по 10 частей файла..

Screenshot_2.png
X-Uploading-Mode: parallel
 

404

Client
Регистрация
23.09.2011
Сообщения
112
Благодарностей
58
Баллы
28
Вычисление кол-ва частей, переменная 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

zennoX

Client
Регистрация
05.04.2014
Сообщения
482
Благодарностей
131
Баллы
43
Разрезать файл:
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)
и я так понимаю он части сохраняет в файлы? Можно ли сохранять в переменные?
 

404

Client
Регистрация
23.09.2011
Сообщения
112
Благодарностей
58
Баллы
28
На 5 версии, к сожалению, я не работаю.
Да, части сохраняет в файлы в виде 0.mp4, 1.mp4, 2.mp4 и тд.
Я потом беру все содержимое папки, в которой сохранены отрезки и добавляю в список ZP.
 
  • Спасибо
Реакции: zennoX

zennoX

Client
Регистрация
05.04.2014
Сообщения
482
Благодарностей
131
Баллы
43
На 5 версии, к сожалению, я не работаю.
Да, части сохраняет в файлы в виде 0.mp4, 1.mp4, 2.mp4 и тд.
Я потом беру все содержимое папки, в которой сохранены отрезки и добавляю в список ZP.
Понял, попробую на 7ке, спасибо!
 

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