У меня проблема с загрузкой файлов с помощью «OpenDrive API». Я могу подключаться и делать другие вещи. Вот разработчик апи: OpenDrive ApiКак переместить файл в куски, используя indy?
Использование Http Analyzer можно увидеть работы как Createupload, Openupload и Closeupload, но я замечаю, что нет пакета передачи во время загрузки (например: 5МБ передачи загрузки) .. Я не могу понять out Как обрабатывать chunksize, chunk_offset во время публикации.
Вот мои коды: -
procedure TUploadThread.Execute;
var
Filename : string;
CreateFileParams : TStrings;
OpenFileParams :TStrings;
CloseFileParams : TStrings;
JResponse : string;
FileID : string;
TempLocation : string;
JFileCreateObject :ISuperObject;
JFileOpenObject : ISuperObject;
begin
filename := ExtractFileName(frmMain.OpenDialog.FileName);
try
CreateFileParams := TStringList.Create;
CreateFileParams.Add('session_id=' + frmMain.SessionKey);
CreateFileParams.Add('folder_id=' + frmMain.CurrentFolderID);
CreateFileParams.Add('file_name=' + FileName);
CreateFileParams.Add('file_size=' + frmMain.UploadFileSize);
CreateFileParams.Add('access_folder_id=Public');
try
{ Try To Create An Instance Of File In The Server }
JResponse := frmMain.HttpClient.Post('https://dev.opendrive.com/api/v1/upload/create_file.json',CreateFileParams);
{ Now We Have Got FileID & DIR_Update Time from ResponseFileCreate in JSON Format. Lets Parse FileID For later use }
JFileCreateObject := SO(JResponse);
FileID := JFileCreateObject['FileId'].AsString; { Here we got FileID}
OpenFileParams := TStringList.Create;
OpenFileParams.Add('session_id=' + frmMain.SessionKey);
OpenFileParams.Add('file_id=' + FileID);
OpenFileParams.Add('file_size=' + frmMain.UploadFileSize);
OpenFileParams.Add('access_folder_id=Public');
try
Sleep(1000); { Wait For 1 sec Then Perform Another Request }
JResponse := frmMain.HttpClient.Post('https://dev.opendrive.com/api/v1/upload/open_file_upload.json', OpenFileParams);
{ Now Parse TempLocation From The Json Response In Jresponse }
JFileOpenObject := SO(JResponse);
TempLocation := JFileOpenObject['TempLocation'].AsString;
{ Finally, Lets pass the parameters to the close Upload session }
CloseFileParams := TStringList.Create;
CloseFileParams.Add('session_id=' + frmMain.SessionKey);
CloseFileParams.Add('file_id=' + FileID);
CloseFileParams.Add('temp_location=' + TempLocation);
CloseFileParams.Add('file_size=' + frmMain.UploadFileSize);
CloseFileParams.Add('access_folder_id=Public');
Sleep(1000); { Wait for 1 sec Then Perform Another Request }
JResponse := frmMain.HttpClient.Post('https://dev.opendrive.com/api/v1/upload/close_file_upload.json', CloseFileParams);
{ If Nothing Exception raises, File Is Uploaded..Wait 1 Sec and Reload The Folder }
frmMain.btnRefresh.Click;
finally
end;
except
ShowMessage('An Error Occured While Uplaoding File(s).Please Try Aagin');
end;
finally
CreateFileParams.Free;
OpenFileParams.Free;
CloseFileParams.Free;
end;
end;
Да, Create_Upload_File_Chunk_Post требуется, но я не в состоянии справиться с этой должности. Необходимыми параметрами являются «Chunk_Offset» и «Chunk_size». Как я могу опубликовать их? Любой сегмент кода или пример будут оценены. –
Они отправляются как данные POST так же, как и ваши другие поля. Вы создаете куски, так что вы должны знать, насколько велики ваши куски, и каков размер файла для каждого куска. Чего это трудно понять? Откройте файл с помощью 'TFileStream' и пропустите его, пока не достигнете EOF. Для каждой итерации цикла установите 'chunk_offset' в текущее' TFileStream.Position', затем прочитайте блок данных из файла и установите 'chunk_size' в число прочитанных байтов, затем POST, который будет блокироваться, а затем повторите. –