2012-11-04 42 views
-4

理念發送圖片在互聯網

我和一個朋友想要玩笑話另外一個朋友,讓一個Delphi應用程序,它需要我們的朋友屏幕的屏幕截圖,然後發送到我的電腦。

問題

的問題是,我和我的朋友不知道如何將圖像發送到我的電腦。任何想法如何?

我已經試過什麼GolezTrol說

這是該代碼(開始於第27行)

procedure TForm1.Button1Click(Sender: TObject); 
var 
    Params: TIMultipartFormDataStream; 
    Response1: TStringStream; 
begin 
    try 
    Params := TIMultipartFormDataStream.create; 
    Response1 := TStringStream.Create; 
    try 
     Params.AddFile('file', 'C:\temp\YourTempImageName.jpg', 'image/jpg'); 
     IdHTTP1.Post('http://localhost/uploadimage.php', Params, Response1); 
    finally 
     Params.Free; 
     Response1.Free; 
    end; 
end; 

(我很忙,試圖使它工作。)

額外信息 重新考慮後,我不再真正看到有趣的一面。順便說一下,我不會強化我的朋友身份。在告訴他我們想做什麼之後,他挑戰我們去嘗試(他打賭我們做不到)。

+0

當然是可能的(在*用來寫的Win32應用程序的任何*語言) –

+0

真棒任何想法如何,但? – Craig

+0

是的,您可以使用Winsock或WinInet或一些更高級別的第三方組件,如Indy組件。 –

回答

6

通過HTTP,您可以在Multipart Formdata發佈請求中發送圖像。當您通過HTML表單上傳圖片時,這是同樣的要求。服務器將不知道區別。 :)

上傳很容易。您創建了一個MultipartFormDataStream,它具有添加文件的方法。然後,您可以使用TIdHTTP發送它。您可以在運行時創建它,但如果您安裝了Indy組件,也可以將它放在表單上。我做了,並保留默認名稱IdHTTP1

在該示例中,我從磁盤加載文件,但可能直接從流加載它。我還沒有嘗試過,但我認爲加載一個臨時文件就可以了。

客戶端Delphi代碼:

var 
    Params: TIdMultipartFormDataStream; 
    Response: TStringStream; 
begin 
    try 
    Params := TIdMultipartFormDataStream.Create; 
    Response := TStringStream.Create; 
    try 
     Params.AddFile('file', 'C:\temp\YourTempImageName.jpg', 'image/jpg'); 

     // Substiture real url below. 
     IdHTTP1.Post('http://localhost/uploadimage.php', Params, Response); 

     // For testing purposes, you may show the response. 
     //Memo1.Text := Response.DataString; 
    finally 
     // Free resources. Important if you want your app to keep running 
     // without being noticed. 
     Params.Free; 
     Response.Free; 
    end; 
    except 
    // Log exception for testing. Don't let it show to the 'friend'. 
    //on e: Exception d 
    // Memo1.Lines.Add(e.Message); 
    end; 
end; 

對於服務器,您可以使用允許保存文件的任何支持PHP的服務器。我已經包含了下面最簡單的例子。當然你也可以用其他語言編寫服務器軟件,包括Delphi。但是如果你用Delphi編寫它,你將需要一個可用的Windows服務器。

服務器實例PHP代碼:

<?php 
if (isset($_FILES['file']) && $_FILES['file']['error'] == UPLOAD_ERR_OK) 
{ 
    // Choose your proper directory here. 
    $target = 'C:\\ff\\uploads\\' . time(); 
    $result = move_uploaded_file($_FILES['file']['tmp_name'], $target); 
    if (!$result) { 
    echo 'Cannot copy'; // This response is sent to the client. 
    } 
} 
+0

在這行代碼 「Params.AddFile('file','C:\ temp \ YourTempImageName.jpg','image/jpg');」 可以將「'C:\ temp \ YourTempImageName.jpg',」更改爲image1,(圖像位於窗體上)。 – Craig

+0

我完全複製了代碼。當我運行該程序它說[錯誤] Unit1.pas(29):未聲明的標識符:'TIdMultipartFormDataStream'爲第二行(var後)。 我沒有安裝Indy(如果這是一個問題,但根據我的說法,Delphi 7自帶Indy,或者我錯了嗎?) – Craig

+2

您需要包含單元'IdMultipartFormDataStream'。但我期望對Delphi本身有一些基本的瞭解。你也會遇到其他一些問題,但我不打算在這裏的評論中逐一回答他們。 – GolezTrol

1

如果您有一些可通過FTP訪問的網絡空間,則可以使用IdFTP或WinInet FTP功能。 (我在這裏獲得了100MB的免費網絡空間和ADSL連接。)

+0

IdFTP是一個很好的選擇,但顯然OP不知道如何使用。 – GolezTrol