не удалось получить большой файл с использованием фрейма

Привет, я использую фреймворк restbed за последние 1 год без каких-либо проблем, для загрузки файлов и данных, я использую этот код
http_service/source/example.cpp но недавно я начал получать ошибку тайм-аута на стороне клиента при загрузке больших видеофайлов (> 150MB).

Я провел некоторое исследование и обнаружил, что функция Transfer-Encoding поможет решить ее, но в результате я получил больше данных, чем исходный файл.

Ниже приведен код, который я использую:

void post_method_handler( const shared_ptr< Session > session )
{
const auto request = session->get_request( );
if ( request->get_header( "Transfer-Encoding", String::lowercase ) == "chunked" )
{
session->fetch( "\r\n", read_chunk_size );
}
}

void read_chunk_size( const shared_ptr< Session > session, const Bytes& data )
{
if ( not data.empty( ) )
{
const string length( data.begin( ), data.end( ) );
if ( length not_eq "0\r\n" )
{
const auto chunk_size = stoul( length, nullptr, 16 ) + strlen( "\r\n" );
session->fetch( chunk_size, read_chunk );
return;
}
}

session->close( OK );

const auto request = session->get_request( );
const auto body = request->get_body( );
fprintf( stdout, "[%d]Complete body content: %.*s\n",body.size( ), static_cast< int >( body.size( ) ), body.data( ) );
syncfs(fd);
close(fd);
}

void read_chunk( const shared_ptr< Session > session, const Bytes& data )
{
static bool extra_data = false;

/*this is to skip first Garbage data  without this i am getting the following data
--------------------------ae1559b7ca6e5945
Content-Disposition: form-data; name="video"; filename="vector.mp4"Content-Type: application/octet-stream

*/
if( extra_data not_eq true ) {
cout << "Partial body chunk: " << data.size( ) << " bytes" << endl;
extra_data = true;
fprintf(stderr,"size == %d\n",data.size());
fd=open("video.mp4",O_CREAT|O_WRONLY,S_IRWXU|S_IRWXG);
}
else{
write(fd,data.data(),data.size());
}
session->fetch( "\r\n", read_chunk_size );
}

ниже команда, которую я использую для публикации видео

curl -w'\n' -v -X POST --header "Transfer-Encoding: chunked" -F "data=@/home/gaian/Downloads/MCA_Songs.mp4" 'http://localhost:1984/resources'

Можно ли как-нибудь отправить большие файлы с помощью постельного белья?

Спасибо

редактировать: чтобы все работало, нужно удалить последние завершающие символы ‘\ r \ n’ из каждого чанка

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]