如何在Web方法中从服务器下载文件? [英] How to download file from server in web method ?

查看:105
本文介绍了如何在Web方法中从服务器下载文件?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我不知道如何使用web方法从服务器下载文件。我试过这样的事。 
我将angularJS中的数据和文件名传递给我的web方法,它创建了excel文件并在服务器中上传。完成文件创建并在服务器上传后
我成功调用我的JS函数后将url返回到另一个webform。
从那里我试图打开新的Web表单,我试图实现下载文件的代码。但是,我的代码将如何知道下载
的生命,因为可能会有多个文件。我如何传递fileName以便我可以识别要下载的文件。

请检查我的代码,让我知道要改变什么以及该怎么做?或任何其他方式来实现这一目标。
谢谢。





我尝试过:



 [WebMethod] 
公共静态字符串ExportExcel(List< Student> students,string fileName)
{

ListtoDataTableConverter converter = new ListtoDataTableConverter();

DataTable dt = converter.ToDataTable(学生);
DataSet ds = new DataSet();
ds.Tables.Add(dt);

string FilePath = fileLocation + fileName + DateTime.Now.ToString(yyyyMMddHHmmssfff)+。xlsx; ;

DataSetToExcel.ExportDataSet(FilePath,ds);

HttpContext.Current.Response.ContentType =application / octet-stream;
HttpContext.Current.Response.AppendHeader(Content-Disposition,filename =+ Path.GetFileName(FilePath));

返回JsonConvert.SerializeObject(new {Success = true,redirectUrl = VirtualPathUtility.ToAbsolute(〜/ DownloadExcelForm.aspx)});

}



Javascript:

$ scope.SendFile = function(filteredItems){
var xlFile = $ scope.xlFilename;
var students = [];
students = filteredItems;

$ http({
方法:POST,
url:ReportStudent.aspx / ExportExcel,
数据:{学生:学生,文件名:xlFile },
contentType:application / json,
dataType:json
})。then(function(response){
var responsedata = JSON.parse(response。 data.d);
window.location.href = responsedata.redirectUrl;

});

};

Webform Pageload:
protected void Page_Load(object sender,EventArgs e)
{

string filepath =;
Response.ContentType = ContentType;
// Response.AppendHeader(Content-Disposition,attachment; filename =+ Path.GetFileName(FilePath));如何传递此文件路径????
Response.TransmitFile(FilePath);
Response.Flush();
System.Threading.Thread.Sleep(1000);
System.Threading.Thread.Sleep(1000);
if(File.Exists(filepath))
{
File.Delete(filepath);
}
//response.writefile(filepath)
Response.End();

}

解决方案

scope.SendFile = function(filteredItems){
var xlFile =

scope.xlFilename;
var students = [];
students = filteredItems;


http({
method:POST,
url:ReportStudent.aspx / ExportExcel,
数据:{学生:学生,文件名:xlFile},
contentType:application / json,
dataType:json
})。then(function(response){
var responsedata = JSON.parse(response.data.d);
window.location.href = responsedata.redirectUrl;

});

};

Webform Pageload:
protected void Page_Load(object sender,EventArgs e)
{

string filepath =;
Response.ContentType = ContentType;
// Response.AppendHeader(Content-Disposition,attachment; filename =+ Path.GetFileName(FilePath));如何传递此文件路径????
Response.TransmitFile(FilePath);
Response.Flush();
System.Threading.Thread.Sleep(1000);
System.Threading.Thread.Sleep(1000);
if(File.Exists(filepath))
{
File.Delete(filepath);
}
//response.writefile(filepath)
Response.End();

}


I do not know how to achieve to download file from server using web method. I tried something like this. 
I passed data and file name from angularJS to my web method, it creates excel file and upload in server. 
after completion of file creation and upload in server i returned url to another webform on success call to my JS function. 
From there I tried to open new web form where i am trying to implement code to download file. But how would my code will know which life to 
download since there could be multiple file presented. how so i pass fileName as well so that i could identified the file to download.

Please check my code and let me know what to change and what to do ? or anyother way to achieve this. 
Thank you.



What I have tried:

[WebMethod]
        public static string ExportExcel(List<Student> students, string fileName)
        {
          
                    ListtoDataTableConverter converter = new ListtoDataTableConverter();

                    DataTable dt = converter.ToDataTable(students);
                    DataSet ds = new DataSet();
                    ds.Tables.Add(dt);

                    string FilePath = fileLocation + fileName + DateTime.Now.ToString("yyyyMMddHHmmssfff") + ".xlsx"; ;

                    DataSetToExcel.ExportDataSet(FilePath, ds);

                    HttpContext.Current.Response.ContentType = "application/octet-stream";
                    HttpContext.Current.Response.AppendHeader("Content-Disposition", "filename=" + Path.GetFileName(FilePath));
                  
                    return JsonConvert.SerializeObject(new { Success = true, redirectUrl = VirtualPathUtility.ToAbsolute("~/DownloadExcelForm.aspx") });
       
        }
		
		

Javascript:

  $scope.SendFile = function (filteredItems) {
        var xlFile = $scope.xlFilename;
        var students = [];
        students = filteredItems ;
      
        $http({
            method: "POST",
            url: "ReportStudent.aspx/ExportExcel",
            data: { students: students, fileName: xlFile },
            contentType: "application/json",
            dataType: "json"
        }).then(function (response) {
            var responsedata = JSON.parse(response.data.d);
            window.location.href = responsedata.redirectUrl;
          
        });

    };
	
Webform Pageload:
 protected void Page_Load(object sender, EventArgs e)
        {
           
            string filepath = "";
            Response.ContentType = ContentType;
          //  Response.AppendHeader("Content-Disposition", "attachment; filename=" + Path.GetFileName(FilePath)); how to pass this file path ????
            Response.TransmitFile(FilePath);
            Response.Flush();
            System.Threading.Thread.Sleep(1000);
                System.Threading.Thread.Sleep(1000);
                if (File.Exists(filepath))
                {
                    File.Delete(filepath);
                }
                //response.writefile(filepath)
                Response.End();
            
        }

解决方案

scope.SendFile = function (filteredItems) { var xlFile =


scope.xlFilename; var students = []; students = filteredItems ;


http({ method: "POST", url: "ReportStudent.aspx/ExportExcel", data: { students: students, fileName: xlFile }, contentType: "application/json", dataType: "json" }).then(function (response) { var responsedata = JSON.parse(response.data.d); window.location.href = responsedata.redirectUrl; }); }; Webform Pageload: protected void Page_Load(object sender, EventArgs e) { string filepath = ""; Response.ContentType = ContentType; // Response.AppendHeader("Content-Disposition", "attachment; filename=" + Path.GetFileName(FilePath)); how to pass this file path ???? Response.TransmitFile(FilePath); Response.Flush(); System.Threading.Thread.Sleep(1000); System.Threading.Thread.Sleep(1000); if (File.Exists(filepath)) { File.Delete(filepath); } //response.writefile(filepath) Response.End(); }


这篇关于如何在Web方法中从服务器下载文件?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆