2017-06-20 13 views
-11

私はDropbox API V2を使用してWindowsデスクトップソフトウェアをDelphi 7で開発しています。 私のコードは機能しません。私に正しい正誤表のDelphiコードを提供してください! ありがとう!Delphi Dropbox API v2ファイルのアップロード

マイコードスニペット:

procedure TDropbox.Upload(SourceFileName: String; DropBoxFileName: String; FTimeout: Integer = 5000); 
const 
    FDropBoxAppAccessToken = 'xxxxxxxxxxxxxxxxxxxx';  
var  
    FHTTPS: TIdHTTP;  
    FStream: TFileStream;  
    FDropBoxResponseCode: Integer;  
    FHTTPResponse: String;  
begin  
    FHTTPRequestURL := 'https://api-content.dropbox.com/2/files/upload';  
    FStream := TFileStream.Create(SourceFileName, fmOpenRead);  
    FStream.Position := 0;  
    FHTTPS := TIdHTTP.Create(nil);  
    FHTTPS.ConnectTimeout := FTimeout;  
    FDropBoxResponseCode := 0;  
    FHTTPResponse := '';  
    params := TStringList.Create;  
    arg := 'Dropbox-API-Arg:{"path:"' + FDropBoxBaseAppPath + DropBoxFileName + '}';  
    try  
    FHTTPS.Request.CustomHeaders.Add('Authorization:Bearer ' + FDropBoxAppAccessToken);  
    FHTTPS.Request.CustomHeaders.AddStrings := '(Dropbox-API-Arg:{"path:"' + FDropBoxBaseAppPath + DropBoxFileName + '}');  
    FHTTPS.Request.CustomHeaders.Values[arg];  
    FHTTPS.Request.ContentType := 'application/octet-stream';  
    FHTTPS.IOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(FHTTPS);  
    FHTTPResponse := FHTTPS.Post(FHTTPRequestURL, FStream);  
    except on E: Exception do  
    begin  
    end;  
    end; 

Dropboxのサーバは常に言う:

400不正な要求を、ソースファイルが存在しています。

助けてください!

+1

適切にあなたのコードをフォーマットしてください。コードと期待される動作を明確に示します。現在、あなたのコードは解釈するのが難しいです。 –

+0

400不正なリクエストエラーは、サーバーが受け入れない方法でHTTPポストの形式が誤っていることを意味します。 – Fero

+0

あなたの '(Dropbox-API-Arg:..'閉じていない ')' ** **の文字列の中に?つまり、 ')'は構文エラーのように見えます。 – MartynA

答えて

1

間違ったURLにリクエストを送信していて、Request.CustomHeadersプロパティを誤って使用していて、JSONデータが不正な形式になっています。

ではなく、より多くのこのようsonething試してみてください:

procedure TDropbox.Upload(const SourceFileName: String; const DropBoxFileName: String; Timeout: Integer = 5000); 
const 
    FDropBoxAppAccessToken = 'xxxxxxxxxxxxxxxxxxxx'; 
    FHTTPRequestURL := 'https://content.dropboxapi.com/2/files/upload'; 
var 
    FHTTPS: TIdHTTP; 
    FStream: TFileStream; 
    FDropBoxResponseCode: Integer; 
    FHTTPResponse: String; 
begin 
    FDropBoxResponseCode := 0; 
    try 
    FStream := TFileStream.Create(SourceFileName, fmOpenRead or fmShareDenyWrite); 
    try 
     FHTTPS := TIdHTTP.Create(nil); 
     try 
     FHTTPS.ConnectTimeout := Timeout; 
     FHTTPS.Request.CustomHeaders.Values['Authorization'] := 'Bearer ' + FDropBoxAppAccessToken; 
     FHTTPS.Request.CustomHeaders.Values['Dropbox-API-Arg'] := '{"path": "' + FDropBoxBaseAppPath + DropBoxFileName + '"}'; 
     FHTTPS.Request.ContentType := 'application/octet-stream'; 
     FHTTPS.IOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(FHTTPS); 
     FHTTPResponse := FHTTPS.Post(FHTTPRequestURL, FStream); 
     finally 
     FHTTPS.Free; 
     end; 
    finally 
     FStream.Free; 
    end; 
    except 
    on E: Exception do begin 
    end; 
    end; 
end; 
関連する問題