2013-01-14 91 views
6

我一直試圖通過TDownloadURL類創建(TFileStream)PDF,但是我真的在從URL獲取文件/流時遇到麻煩,特別是如果URL是HTTPS。TDownloadURL無法從HTTPS下載

我不知道如果我是清楚的,但我會發佈一個段,這樣它可以幫助理解:

implementation 
var pdfStreamed: TDownloadUrl; 
var fileStream : TFileStream; 
    procedure generateStream; 
    begin 
    pdfStreamed:= TDownLoadURL.Create(nil); 
    with pdfStreamed do 
     begin 
     URL := 'https://farm9.staticflickr.com/8327/8106108098_08e298f0d9_b.jpg'; //stream; 
     FileName := 'D:\'; 
     ExecuteTarget(nil); 
//  Execute; 
     end; 
    end; 

的URL屬性中都存在HTTP作爲HTTPS!但它給我一個錯誤: 異常類異常與消息'錯誤下載URL:https://farm9.staticflickr.com/8327/8106108098_08e298f0d9_b.jpg'。

能指出我做錯了什麼?我爲此搜索了很多,但找不到任何工作和簡單的東西!

非常感謝!

回答

5

TDownloadURL只是微軟的URLDownloadToFile()函數的一個薄包裝,它支持HTTPS就好。

TDownloadURL不會告訴你爲什麼URLDownloadToFile()失敗,不幸的是。但是,我可以看到您將FileName屬性設置爲文件夾路徑,但您需要將其設置爲將要創建的目標文件的完整路徑和文件名以容納下載的數據。督察,改變這種:

FileName := 'D:\'; 

要這樣:

FileName := 'D:\8106108098_08e298f0d9_b.jpg'; 
+0

嘿@Remy感謝您的答覆,但我已經試過這個解決方案,它沒有工作!它一直顯示「Error download URL」。我知道這只是一個包裝,但是Deplhi能否以這種方式影響這個調用?它會給我一個錯誤? :\ 順便說一下,如果我用HTTP替換HTTPS,它就可以工作!但我真的需要HTTPS = \ –

+0

您看到的錯誤消息意味着'URLDownloadToFile()'本身失敗,而不是'TDownloadURL'。這只是一個普通的API函數調用。如果你想知道爲什麼'URLDownloadToFile()'失敗,你需要直接調用它,這樣你就可以訪問它產生的錯誤代碼,'TDownloadURL'不會公開訪問。 –

3

更改文件名以指定正確的地方保存,但要解決,你的ExecuteTarget行更改爲類似

使用雷米的回答

ExecuteTarget(Self);

我剛剛嘗試了您的代碼,並且成功下載了圖像。從本質上說,組件需要一個處理引用從Here