ASP.NET/VB.NET Управление загрузкой файлов

#asp.net #vb.net #file-upload

#asp.net #vb.net #загрузка файлов

Вопрос:

У меня проблема с загрузкой файлов, когда я выбираю файл с локального компьютера, он не выводит реальный путь к файлу, он будет использовать путь к файлам проекта и предполагать, что файл, который я выбираю, есть, какие-нибудь идеи?

Пример: имя файла равно «Q.JPG «и находится в «C:», когда я перехожу к «C:» и выбираю «Q.JPG «и нажмите открыть, я получаю следующую ошибку Не удалось найти файл ‘C:Program Файлы Microsoft Visual Studio 8Common7IDEq.jpg ‘. Поэтому, когда я запускаю код для загрузки файла, например, на FTP, он возвращает ошибку, поскольку файл не существует

HTML-сторона:

 <asp:FileUpload ID="FU" runat="server" Height="24px" />
  

Ниже приведен код VB:

 Protected Sub btnUpload_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnUpload.Click

    If FU.PostedFile IsNot Nothing AndAlso FU.PostedFile.FileName <> "" Then
        Dim MaxSize As Integer = FU.PostedFile.ContentLength
        If MaxSize > "2097152" Then
            lblUpload.Text = "The file size cannot exceed 2 MB"
            btnSave.Focus()
            GoTo 99
        End If


        '--------------------------
        ' set up request...
        Dim LocFile As String = FU.PostedFile.FileName
        Dim clsRequest As System.Net.FtpWebRequest = DirectCast(System.Net.WebRequest.Create("ftp://myftp.com/" amp; LocFile), System.Net.FtpWebRequest)
        clsRequest.Credentials = New System.Net.NetworkCredential("username", "password")
        clsRequest.Method = System.Net.WebRequestMethods.Ftp.UploadFile

        ' read in file...
        Dim bFile() As Byte = System.IO.File.ReadAllBytes(FU.PostedFile.FileName)

        ' upload file...
        Dim clsStream As System.IO.Stream = clsRequest.GetRequestStream()
        clsStream.Write(bFile, 0, bFile.Length)
        clsStream.Close()
        clsStream.Dispose()
        '--------------------------


        lblUpload.Text = "Uploaded"
        btnSave.Focus()
    Else
        lblUpload.Text = "Choose a file to upload"
        btnSave.Focus()
    End If
  

99: ‘Ничего не делать

 End Sub
  

Комментарии:

1. Похоже, проблема на стороне клиента (т. Е. вашего браузера), а не на стороне сервера.

2. Не могли бы вы опубликовать свою разметку средства загрузки файлов, кнопки открытия и обработчиков событий для любых событий, связанных с этими элементами управления?

3. msdn.microsoft.com/en-us/library/aa479405.aspx

Ответ №1:

Проблема в том, что вы пытаетесь прочитать PostedFile как локальный файл (на веб-сервере), а не из объекта HttpPostedFile, прикрепленного к FileUploader.

Попробуйте:

 Dim objFileStream As System.IO.Stream = FU.PostedFile.InputStream
Dim bFile(objFileStream.Length) As Byte
objFileStream.Read(bFile, 0, objFileStream.Length)
  

Ответ №2:

Я кое-что попробовал, и это сработало..

             FU.SaveAs("C:" amp; FU.FileName)

            '--------------------------
            ' set up request...

            Dim LocFile As String = FU.PostedFile.FileName
            Dim clsRequest As System.Net.FtpWebRequest = DirectCast(System.Net.WebRequest.Create("MyFTP.com" amp; LocFile), System.Net.FtpWebRequest)

            clsRequest.Credentials = New System.Net.NetworkCredential("username", "password")
            clsRequest.Method = System.Net.WebRequestMethods.Ftp.UploadFile
  

Это сработало.. просто сохраните файл из FU (FileUpload) в C: , а затем установите адрес так, чтобы он всегда начинался с C:

Комментарии:

1. Да, это сработает, но вы не достигнете своей цели не использовать диск сервера. Было бы неплохо, если бы вы приняли ответ на этот вопрос.