|  | 
 
|  
 จากตอนที่แล้วเราได้ อัพโหลดไฟล์ด้วยการใช้โปรโตคอล FTP คราวนี้ลองมาใช้ SFTP กันดูบ้าง ... SFTP หรือ Secure File Transfer Protocol เป็นโปรแกรมที่ใช้ในการส่งถ่ายข้อมูลไฟล์เอกสาร โดยลักษณะเด่นของ SFTP คือ การทำงานบน SSH ซึ่งมีการเข้ารหัสข้อมูล ทำให้การส่งย้ายไฟล์มีความปลอดภัยมากยิ่งขึ้นเมื่อเทียบกับ FTP ธรรมดา ... สมัครใช้งานฟรีโฮสติ้ง HelioHost.org ได้ที่ ...
 
 ต้อง Add Reference เข้ามาด้วยล่ะครับ ... ดาวน์โหลด Chilkat .Net Component ได้ที่นี่ (สำหรับสมาชิกเท่านั้น)
  
 สำหรับการเข้าสู่ระบบผ่าน FTP Client ไปยัง HelioHost.org ...
 
  
 มาดูโค้ดกันเถอะ ...
 
 คัดลอกไปที่คลิปบอร์ดImports System.IO
Imports System.Net
Imports Chilkat.Ftp2
Public Class frmUploadImageSFTP
    Dim UploadFileName As String = ""  '// Full Path and File name of Image.
    Dim streamPic As Stream     '// Use Steam instead IO.
    Dim PicturePath As String = MyPath(Application.StartupPath) & "Images"
    '// แยกชื่อไฟล์+นามสกุล เพื่อทำการ Upload ไปยัง Hosting
    Dim MyPictureName As String = String.Empty
    '// ลิ้งค์ที่จะทำการแสดงผลภาพ หลังจากการอัพโหลด (สร้างโฟลเดอร์ upload เพิ่มขึ้นด้วยครับ) 
    Dim MyURL As String = "http://g2gnet.heliohost.org/upload/"
    Private Sub frmUploadImageSFTP_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        Call UnlockChilkat()
        '// Initialized.
        '// For HelioHost.org
        txtRemoteDir.Text = "/home/g2gnet/public_html/upload/"
        Label1.Text = ""
        picData.Image = Image.FromFile(PicturePath + "NoImage.gif")
        Label3.Text = MyURL
    End Sub
    Private Sub btnBrowse_Click(sender As System.Object, e As System.EventArgs) Handles btnBrowse.Click
        Dim dlgImage As OpenFileDialog = New OpenFileDialog()
        ' / Open File Dialog
        With dlgImage
            '.InitialDirectory = PicturePath 'PicturePath
            .Title = "เลือกภาพ"
            .Filter = "รูปแบบภาพ (*.jpg;*.png;*.gif;*.bmp)|*.jpg;*.png;*.gif;*.bmp"
            .FilterIndex = 1
            .RestoreDirectory = True
        End With
        ' Select OK after Browse ...
        If dlgImage.ShowDialog() = DialogResult.OK Then
            '// New Image
            UploadFileName = dlgImage.FileName
            ' Get file size
            Dim info As New FileInfo(dlgImage.FileName)
            If (info.Length / 1024) > 1024 Then
                MessageBox.Show("ไฟล์ภาพที่คุณเลือกมีขนาด " & Format((info.Length / 1024), "#,##0") & " KB. ซึ่งมีขนาดใหญ่เกินกว่า 1,024 KB.", "รายงานสถานะ", MessageBoxButtons.OK, MessageBoxIcon.Warning)
                Exit Sub
            End If
            Dim arr() As String = Split(dlgImage.FileName, "")
            '// ตัดเอาเฉพาะชื่อไฟล์ เช่น sample.png เพื่อส่งค่าไปต่อ RemoteDir
            MyPictureName = arr(UBound(arr))
            '/
            picData.Image = Image.FromFile(UploadFileName)
            Label1.Text = UploadFileName
        End If
    End Sub
    ' / -----------------------------------------------------------------------------
    ' / Use Steam instead IO.
    ' / -----------------------------------------------------------------------------
    Sub ShowPicture(PicName As String)
        Dim imgDB As Image
        ' Get the name of the image file from the database.
        If PicName.ToString <> "" Then
            ' Verify that the image file meets the specified location.
            If System.IO.File.Exists(PicturePath & PicName.ToString) Then
                ' Because when deleting the image file is locked, it can not be removed.
                ' The file is closed after the image is loaded, so you can delete the file if you need to
                streamPic = File.OpenRead(PicturePath & PicName.ToString)
                imgDB = Image.FromStream(streamPic)
                picData.Image = imgDB
                UploadFileName = PicName
            Else
                ' No images were retrieved from the database.
                streamPic = File.OpenRead(PicturePath & "NoImage.gif")
                imgDB = Image.FromStream(streamPic)
                picData.Image = imgDB
                UploadFileName = ""
            End If
            ' Is null
        Else
            streamPic = File.OpenRead(PicturePath & "NoImage.gif")
            imgDB = Image.FromStream(streamPic)
            picData.Image = imgDB
            UploadFileName = ""
        End If
        '//
        streamPic.Dispose()
    End Sub
    Private Sub btnDeleteImg_Click(sender As System.Object, e As System.EventArgs) Handles btnDeleteImg.Click
        picData.Image = Image.FromFile(PicturePath & "NoImage.gif")
        UploadFileName = ""
        Label1.Text = ""
    End Sub
    Private Sub btnUpload_Click(sender As System.Object, e As System.EventArgs) Handles btnUpload.Click
        If picData.Image Is Nothing Or UploadFileName Is Nothing Or UploadFileName.Length = 0 Or UploadFileName = "" Then
            MessageBox.Show("Please select the image file first.", "Report Error", MessageBoxButtons.OK, MessageBoxIcon.Warning)
            Return
        End If
        '//
        Me.Cursor = Cursors.WaitCursor
        '// Upload to Hosting with SFTP.
        Call UploadSFTP()
        '// Show Image From URL.
        Call ShowImgURL(MyPictureName, picURL)
        Me.Cursor = Cursors.Default
        '// Clear
        UploadFileName = ""
        picData.Image = Image.FromFile(PicturePath + "NoImage.gif")
        Label1.Text = ""
    End Sub
    Private Sub UploadSFTP()
        Dim sftp As New Chilkat.SFtp
        '/ Set some timeouts, in milliseconds: 1 Sec = 1,000 ms.
        sftp.ConnectTimeoutMs = 15000
        sftp.IdleTimeoutMs = 15000
        '/ Connect to the SSH server.  
        '/ The standard SSH port = 22
        '/ The hostname may be a hostname or IP address.
        Dim hostname As String = "johnny.heliohost.org"
        Dim port As Integer = 1373
        Dim success As Boolean = sftp.Connect(hostname, port)
        If (success <> True) Then
            MessageBox.Show(sftp.LastErrorText)
            Exit Sub
        End If
        '/ Authenticate with the SSH server.  Chilkat SFTP supports
        '/ both password-based authenication as well as public-key
        '/ authentication.  This example uses password authenication.
        Dim Username As String = "SUPERUSER"
        Dim Password As String = "PASSWORD"
        success = sftp.AuthenticatePw(Username, Password)
        If (success <> True) Then
            MessageBox.Show(sftp.LastErrorText)
            Exit Sub
        End If
        '/ After authenticating, the SFTP subsystem must be initialized:
        success = sftp.InitializeSftp()
        If (success <> True) Then
            MessageBox.Show(sftp.LastErrorText)
            Exit Sub
        End If
        '/ Upload from the local file to the SSH server.
        '/ Important -- the remote filepath is the 1st argument,
        '/ the local filepath is the 2nd argument;
        Dim remoteFilePath As String = txtRemoteDir.Text + MyPictureName ' "/home/g2gnet/public_html/upload/" + MyPictureName
        Dim localFilePath As String = UploadFileName
        success = sftp.UploadFileByName(remoteFilePath, localFilePath)
        If (success <> True) Then
            MessageBox.Show(sftp.LastErrorText)
            Exit Sub
        End If
        MessageBox.Show("File Uploaded Complete.", "Report Status", MessageBoxButtons.OK, MessageBoxIcon.Information)
    End Sub
    '// Show Image From URL.
    Public Sub ShowImgURL(PicName As String, ByRef picData As PictureBox)
        '// Check
        If Not IsValid(MyURL & PicName) Or PicName = "" Then
            PicName = "NoImage.gif"
        End If
        Dim wClient As WebClient = New WebClient
        Dim bmpImage As Bitmap = Bitmap.FromStream(New MemoryStream(wClient.DownloadData(MyURL & PicName + "?r=" + DateTime.Now.Ticks.ToString)))
        Try
            With picData
                .SizeMode = PictureBoxSizeMode.StretchImage
                .WaitOnLoad = True ' False
                picData.Image = bmpImage
            End With
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
    End Sub
    '// Check Valid Image.
    Public Function IsValid(ByVal Url As String) As Boolean
        Dim sStream As Stream
        Dim URLReq As HttpWebRequest
        Dim URLRes As HttpWebResponse
        Try
            URLReq = WebRequest.Create(Url + "?r=" + DateTime.Now.Ticks.ToString)
            URLRes = URLReq.GetResponse()
            sStream = URLRes.GetResponseStream()
            Dim reader As String = New StreamReader(sStream).ReadToEnd()
            Return True
        Catch ex As Exception
            'Url not valid
            Return False
        End Try
    End Function
    Public Sub UnlockChilkat()
        Dim glob As New Chilkat.Global
        Dim success As Boolean = glob.UnlockBundle("LOCK_KEY")
        If (success <> True) Then
            MessageBox.Show(glob.LastErrorText)
            Exit Sub
        End If
        Dim status As Integer = glob.UnlockStatus
        If (status = 2) Then
            'MessageBox.Show("Unlocked using purchased unlock code.")
        Else
            MessageBox.Show("Unlocked in trial mode.")
        End If
    End Sub
    ' / Get my project path
    ' / AppPath = C:\My Project\bin\debug
    ' / Replace "\bin\debug" with ""
    ' / Return : C:\My Project\
    Function MyPath(ByVal AppPath As String) As String
        '/ MessageBox.Show(AppPath);
        AppPath = AppPath.ToLower()
        '/ Return Value
        MyPath = AppPath.Replace("\bin\debug", "").Replace("\bin\release", "").Replace("\bin\x86\debug", "").Replace("\bin\x86\release", "")
        '// If not found folder then put the \ (BackSlash) at the end.
        If Microsoft.VisualBasic.Right(MyPath, 1) <> Chr(92) Then MyPath = MyPath & Chr(92)
    End Function
    Private Sub frmUploadImageSFTP_FormClosed(sender As Object, e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
        Me.Dispose()
        GC.SuppressFinalize(Me)
        Application.Exit()
    End Sub
End Class
ดาวน์โหลดโค้ดต้นฉบับแบบเต็ม VB.NET (2010) ได้ที่นี่ ...
 
 
 | 
 
xขออภัย! โพสต์นี้มีไฟล์แนบหรือรูปภาพที่ไม่ได้รับอนุญาตให้คุณเข้าถึงคุณจำเป็นต้อง ลงชื่อเข้าใช้ เพื่อดาวน์โหลดหรือดูไฟล์แนบนี้ คุณยังไม่มีบัญชีใช่ไหม? ลงทะเบียน  |