2016-04-10 12 views
1

asp.netのボタンを使用してファイルをダウンロードしようとしていますが、このボタンは私のケースではダウンロードされたファイルとしてwebform aspxを提供します。DownloadFileTest.apsx私は正しいファイルをダウンロードする必要がありました。これは、私のソリューションエクスプローラにアップロードされたファイルが表示されない場合に役立ちます。しかし、それは私のプロジェクトのフォルダ内にアクセスすると表示されます。ここでは、コードファイルasp.net

protected void Button1_Click(object sender, EventArgs e) 
    { 
     string filename = TextBox1.Text; 
     Response.ContentType = "application/octet-stream"; 
     Response.AppendHeader("content-diposition", "attach;filename" + filename); 
     Response.TransmitFile(Server.MapPath("~/CustomerFiles/" + filename)); 
     Response.End(); 
    } 
+0

これは機能しますか? Response.TransmitFile(Server.MapPath( "〜/ CustomerFiles /")+ filename); –

+0

@poulバクレム –

+1

を試してみてください待っては、「添付」「添付ファイル、ファイル名=」でなければなりません –

答えて

1

これは私がfuldFilNavnは、ファイルの完全なパスが含まれていることを確認し、ファイルをダウンロードするために使用するコードです:

public static void DownloadFil(string fuldFilNavn) 
 
    { 
 
     HttpContext context = HttpContext.Current; 
 
     context.Response.ClearHeaders(); 
 
     context.Response.ClearContent(); 
 
     string filNavn = Uri.EscapeDataString(Path.GetFileName(fuldFilNavn)).Replace("+", "%20"); 
 
     context.Response.AppendHeader("Content-Disposition", "attachment;filename*=utf-8''" + filNavn); 
 
     context.Response.AppendHeader("Last-Modified", File.GetLastWriteTimeUtc(fuldFilNavn).ToString("R")); 
 
     context.Response.ContentType = "application/octet-stream"; 
 
     context.Response.AppendHeader("Content-Length", new FileInfo(fuldFilNavn).Length.ToString()); 
 
     context.Response.TransmitFile(fuldFilNavn); 
 
     context.Response.End(); 
 
    }

これは、ファイル名にUnicode文字を含むファイルをダウンロードします!

+0

私はそれを得ました。 –

0

あなたは、次のASP.NET/C#コードスニペットを試みることがある:

あなたがあなたの元の溶液のように Server.MapPathを使用することができ、ルートフォルダとフルパスを取得するために
internal static void Download(string FileName) 
{ 
    HttpResponse _response = HttpContext.Current.Response; 
    FileStream _fileStream; 
    byte[] _arrContentBytes; 
    try 
    { 
     // clear response obj 
     _response.Clear(); 

     // clear content of response obj 
     _response.ClearContent(); 

     // clear response headers 
     _response.ClearHeaders(); 

     // enable response buffer 
     _response.Buffer = true; 

     // specify response content 
     _response.ContentType = ContentType; 

     _response.StatusCode = 206; 
     _response.StatusDescription = "Partial Content"; 

     // create FileStream: IMPORTANT - specify FileAccess.Read 
     _fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read); 

     // Bytes array size= (int)_fs.Length; 
     _arrContentBytes = new byte[(int)_fileStream.Length]; 

     // read file into bytes array 
     _fileStream.Read(_arrContentBytes, 0, (int)_fileStream.Length); 

     // add response header 
     _response.AddHeader("content-disposition", "attachment;filename=" + FileName); 

     // ACTUAL PROCEDURE: use BinaryWrite to download file 
     _response.BinaryWrite(_arrContentBytes); 

     // ALTERNATIVE: TransmitFile 
     //_response.TransmitFile(filePath); 

     // close FileStream 
     _fileStream.Flush(); 
     _fileStream.Close(); 

     _response.Flush(); 
     HttpContext.Current.ApplicationInstance.CompleteRequest(); 
    } 
    catch { } 
    finally 
    { 
     _fileStream = null; 
     _arrContentBytes = null; 
    } 
} 

またはより良い性能のために次の行:

// get the root dir; fast 
string _root = AppDomain.CurrentDomain.BaseDirectory; 

このソリューションでは、実際のWebアプリ(http://taxiom.com/Manual_Payday.aspx)に実装/テストされています - 「ダウンロード」ボタンを参照してください。デモ用のページの右上にあります。これが役立つことを願っています。