【问题标题】:FTP Client uploads only 0KB filesFTP 客户端只上传 0KB 的文件
【发布时间】:2015-06-02 21:31:32
【问题描述】:

我的 FTP 客户端有一个小问题。
选择一个文件有效,用 4 个变量重命名该文件有效。
是上传给我带来了麻烦。 每当一个文件上传到 FTP 服务器时,它都会说它是 0KB。

我正在考虑两个可能的问题:

Visual Studio 告诉我变量 file 在被赋值之前被使用,为了确保它不为空,我做了以下操作。

Dim file As Byte()  

If (Not file Is Nothing) Then
            strz.Write(file, 0, file.Length)
            strz.Close()
            strz.Dispose()
            FileSystem.Rename(Filename, originalFile)
        End If

这会处理任何可能的错误。

第二个是 fName,与 file 相同的警告,我以同样的方式处理它。

另一种可能性是我的代码只取了 4 个变量并将其制成一个文件并上传,因此大小为 0KB....

这是我的代码:

Dim Filename As String
    Dim originalFile As String

    Private Function enumerateCheckboxes(ByVal path As String)
        originalFile = path
        Dim fName As String
        For Each Control In Me.Controls
            If (TypeOf Control Is ComboBox AndAlso DirectCast(Control, ComboBox).SelectedIndex > -1) Then
                fName += CStr(Control.SelectedItem.Key) + "_"
            End If
        Next
        Try
            fName = path + fName.Substring(0, fName.Length - 1) + ".jpg"
        Catch ex As Exception
            MsgBox(ex.Message)
            MsgBox("Stack Trace: " & vbCrLf & ex.StackTrace)
        End Try
        Return fName
    End Function

    Public Function OpenDialog()
        Dim FD As OpenFileDialog = New OpenFileDialog()

        FD.Title = "Selecteer een bestand"
        FD.InitialDirectory = "C:\"
        FD.Filter = "All files (*.*)|*.*|All files (*.*)|*.*"
        FD.FilterIndex = 2
        FD.RestoreDirectory = True

        If FD.ShowDialog() = DialogResult.OK Then
            Dim Filename As String = FD.FileName
            Filename = StrReverse(Filename)
            Filename = Mid(Filename, InStr(Filename, "\"), Len(Filename))
            Filename = StrReverse(Filename)
            MsgBox(enumerateCheckboxes(Filename))
        End If
    End Function

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

        Dim request As System.Net.FtpWebRequest = DirectCast(System.Net.WebRequest.Create("ip" & enumerateCheckboxes(Filename)), System.Net.FtpWebRequest)
        request.Credentials = New System.Net.NetworkCredential("username", "password")
        request.Method = System.Net.WebRequestMethods.Ftp.UploadFile

        Dim file() As Byte

        Try
            Filename = OpenDialog()
            If (Not Filename Is Nothing) Then
                System.IO.File.ReadAllBytes(Filename)
            End If
        Catch ex As Exception
            MessageBox.Show(ex.Message)
            MessageBox.Show("Stack Trace: " & vbCrLf & ex.StackTrace)
        End Try
        If (Not Filename Is Nothing) Then
            FileSystem.Rename(originalFile, Filename)
        End If
        Dim strz As System.IO.Stream = request.GetRequestStream()
        If (Not file Is Nothing) Then
            strz.Write(file, 0, file.Length)
            strz.Close()
            strz.Dispose()
            FileSystem.Rename(Filename, originalFile)
        End If
    End Sub
End Class

我查看了多个与我有相同问题的线程。
this 之类的主题 但我不相信这适用于我的问题。 如果您愿意解释我做错了什么以及将来如何解决和避免这种情况,我的调试仍然有点粗糙......

提前谢谢你!

【问题讨论】:

    标签: vb.net file-upload ftp


    【解决方案1】:

    Visual Studio 会向您发出警告,因为您从未将任何内容分配给 file 数组。我认为在你拥有的那一行:

    System.IO.File.ReadAllBytes(Filename)
    

    你真的想拥有:

    file = System.IO.File.ReadAllBytes(Filename)
    

    【讨论】:

    • 好的,我知道我哪里出错了,但是.. 上传到我服务器的文件仍然是 0Kb
    • 我认为您还需要在处理流之前致电request.GetResponse()
    猜你喜欢
    • 1970-01-01
    • 2010-12-26
    • 2012-03-20
    • 1970-01-01
    • 2018-06-07
    • 2015-07-20
    • 2015-05-10
    • 1970-01-01
    • 2023-04-01
    相关资源
    最近更新 更多