J'ai lutté avec cela pendant des jours. J'essaye de créer la fonctionnalité pour que quelqu'un télécharge simplement un fichier d'image de leur machine locale à un serveur FTP using le contrôle de FileUpload. Le problème est, le contrôle FileUpload ne peut pas récupérer explicitement le chemin de l'image à télécharger à partir de la machine client, et donc je ne peux pas obtenir dynamiquement le chemin source de l'image si elle devait être téléchargée depuis n'importe quel pc sur le net. La seule façon de 'SORT OF' obtenir le chemin, ou plutôt le flux utilise FileUpload.PostedFile.inputStream. Le problème avec ceci est cependant la conversion de l'image en un tableau d'octets. La fonctionnalité que j'ai recherché jusqu'ici pour le faire ont tous téléchargé le fichier sur le serveur avec 0 octets. Si j'utilise StreamReader (FileUpload.PostedFile.InputStream) et que j'obtiens des octets en encodant avec UTF8, l'image téléchargée a des octets mais plus grands que le fichier original et l'image est corrompue.Comment convertir Stream en octets()
Ce qui suit est le code im utiliser pour télécharger
Public Sub Upload()
'FTP Server URL.
Dim ftp As String = "ftp://winhost1.axxesslocal.co.za"
'FTP Folder name. Leave blank if you want to upload to root folder.
Dim ftpFolder As String = "/httpdocs/images/"
Dim fileBytes As Byte() = Nothing
'Read the FileName and convert it to Byte array.
Dim fileName As String = Path.GetFileName(ImageUpload.FileName)
Using fileStream As New StreamReader(ImageUpload.PostedFile.InputStream)
fileBytes = Encoding.UTF8.GetBytes(fileStream.ReadToEnd())
fileStream.Close()
End Using
'Create FTP Request.
Dim request As FtpWebRequest = DirectCast(WebRequest.Create(ftp & ftpFolder & fileName), FtpWebRequest)
request.Method = WebRequestMethods.Ftp.UploadFile
'Enter FTP Server credentials.
request.Credentials = New NetworkCredential("******", "******")
request.ContentLength = fileBytes.Length
request.UsePassive = True
request.UseBinary = True
request.ServicePoint.ConnectionLimit = fileBytes.Length
request.EnableSsl = False
Using requestStream As Stream = request.GetRequestStream()
requestStream.Write(fileBytes, 0, fileBytes.Length)
requestStream.Close()
End Using
Dim response As FtpWebResponse = DirectCast(request.GetResponse(), FtpWebResponse)
response.Close()
End Sub
Je sais que la question est ici fileBytes = Encoding.UTF8.GetBytes (fileStream.ReadToEnd())
Mais je ne sais pas comment les autres convertir ImageUpload.PostedFile.InputStream() en octets qui me donnera une image non déformée.
fileStream ne marche pas avoir une méthode .length –
Quelle est [ce] (https: // msdn.microsoft.com/en-us/library/system.io.filestream.length(v=vs.110).aspx) alors? –
Cest en utilisant la classe FileStream. La variable fileStream ci-dessus est de type StreamReader –