2017-11-19 43 views
1

イメージアップロードが成功しました。私は読み込む前にJavaScriptでプレビューをしています。アップロードされたファイルをFTPにアップロードすると、ASP.NETで破損します。

画像が読み込まれると画像が黒に変換されます。 StreamReaderに問題がありますか?

私には何が分かりますか?おかげで..

asp.net

<input id="fileupload2" type="file" runat="server" clientidmode="Static" /> 

分離コード

string fileName = Path.GetFileName(fileupload2.PostedFile.FileName); 
using (StreamReader fileStream = new StreamReader(fileupload2.PostedFile.InputStream)) 
{ 
    fileBytes = Encoding.UTF8.GetBytes(fileStream.ReadToEnd());     
    fileStream.Close(); 
} 

try 
{ 
    if (fileupload2.PostedFile.ContentLength < 5120000) 
    { 
     //Create FTP Request. 
     FtpWebRequest request = 
      (FtpWebRequest)WebRequest.Create(ftp + ftpFolder + fileName); 
     request.Method = WebRequestMethods.Ftp.UploadFile; 

     //Enter FTP Server credentials. 
     request.Credentials = new NetworkCredential("USER", "PASS"); 
     request.ContentLength = fileBytes.Length; 
     request.UsePassive = true; 
     request.UseBinary = true; 
     request.ServicePoint.ConnectionLimit = fileBytes.Length; 
     request.EnableSsl = false; 

     using (Stream requestStream = request.GetRequestStream()) 
     { 
      requestStream.Write(fileBytes, 0, fileBytes.Length); 
      requestStream.Close(); 
     } 

     FtpWebResponse response = (FtpWebResponse)request.GetResponse(); 

     // lblMessage.Text += fileName + " uploaded.<br />"; 
     response.Close(); 
    } 
    else 
    { 
     ScriptManager.RegisterClientScriptBlock(
      this, this.GetType(), "Dikkat", 
      "alert('Dosya 5 MB'dan küçük olmalıdır.')", true); 
    } 
} 
catch (WebException ex) 
{ 
    throw new Exception((ex.Response as FtpWebResponse).StatusDescription); 
} 

答えて

1
fileBytes = Encoding.UTF8.GetBytes(fileStream.ReadToEnd()); 

あなたはUTF-8テキストとしてバイナリファイルを解釈しよう。それだけではうまくいかない。

さらに、ファイル全体をメモリに不必要にコピーすると、実装が非常に非効率的になります。


これは、シンプルかつ効率的なソリューションです:他のコードは必要ありません

FtpWebRequest request = (FtpWebRequest)WebRequest.Create(ftp + ftpFolder + fileName); 
request.Method = WebRequestMethods.Ftp.UploadFile; 
request.Credentials = new NetworkCredential("USER", "PASS"); 

using (Stream requestStream = request.GetRequestStream()) 
{ 
    fileupload2.PostedFile.InputStream.CopyTo(requestStream); 
} 

  • UsePassive = trueUseBinary = trueEnableSsl = falseはデフォルトです。
  • ContentLengthは、FtpWebRequestでは使用されていません。
  • FtpWebRequest.GetResponseアップロードにはコールは必要ありません。
  • ServicePoint.ConnectionLimitは、バイト数とは関係ありません。
+0

を動作していない –

+0

全体 '(StreamReaderをFILESTREAM =新しいStreamReaderを(fileupload2.PostedFile.InputStream)){...}'ブロックを使用して削除し、 'requestStreamを置き換えます.Write(fileBytes、0、fileBytes.Length); 'と' fileupload2.PostedFile.InputStream.CopyTo(requestStream); '。 –

+0

http://desteliyonetim.xyz/hata.PNG fileBytes.Length nullを取得する –

1

私はそれがまたStreamReaderによるものであると思います。 StreamReaderは、特にbyte[]だけでなく、テキスト用です。

代わりに、FileUpload.PostedFile.InputStreamのデータを取得するのに、FileUpload.FileBytesを使用します。または、より一般的なデータのストリーム用のStream.Read()を使用することもできます。

+0

stream.Read()は私が書く必要がある行 –

関連する問題