0

このコードを使用して、ソリューションに存在する Excel ファイルをダウンロードしています。フォルダー FileUpload を追加し、Excel ファイル UploadCWF.xlsx を追加しました。私のコードはローカル ホストで動作しています。しかし、これをサーバーにホストすると機能しません。エラーが発生します-パスの一部が見つかりませんでした。私のコード -

        string filePath = HttpContext.Current.Server.MapPath("~/FileUpload/");
        string _DownloadableProductFileName = "UploadCWF.xlsx";

        System.IO.FileInfo FileName = new System.IO.FileInfo(filePath + "\\" + _DownloadableProductFileName);
        FileStream myFile = new FileStream(filePath + "\\" + _DownloadableProductFileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);

        //Reads file as binary values
        BinaryReader _BinaryReader = new BinaryReader(myFile);

        //Check whether file exists in specified location
        if (FileName.Exists)
        {
            try
            {
                long startBytes = 0;
                string lastUpdateTiemStamp = File.GetLastWriteTimeUtc(filePath).ToString("r");
                string _EncodedData = HttpUtility.UrlEncode(_DownloadableProductFileName, Encoding.UTF8) + lastUpdateTiemStamp;

                Response.Clear();
                Response.Buffer = false;
                Response.AddHeader("Accept-Ranges", "bytes");
                Response.AppendHeader("ETag", "\"" + _EncodedData + "\"");
                Response.AppendHeader("Last-Modified", lastUpdateTiemStamp);
                Response.ContentType = "application/octet-stream";
                Response.AddHeader("Content-Disposition", "attachment;filename=" + FileName.Name);
                Response.AddHeader("Content-Length", (FileName.Length - startBytes).ToString());
                Response.AddHeader("Connection", "Keep-Alive");
                Response.ContentEncoding = Encoding.UTF8;

                //Send data
                _BinaryReader.BaseStream.Seek(startBytes, SeekOrigin.Begin);

                //Dividing the data in 1024 bytes package
                int maxCount = (int)Math.Ceiling((FileName.Length - startBytes + 0.0) / 1024);

                //Download in block of 1024 bytes
                int i;
                for (i = 0; i < maxCount && Response.IsClientConnected; i++)
                {
                    Response.BinaryWrite(_BinaryReader.ReadBytes(1024));
                    Response.Flush();
                }
            }
            catch (Exception es)
            {
                throw es;
            }
            finally
            {
                Response.End();
                _BinaryReader.Close();
                myFile.Close();
            }
        }
        else

            System.Web.UI.ScriptManager.RegisterStartupScript(this, GetType(),
            "FileNotFoundWarning", "alert('File is not available now!')", true);

誰か助けてください。

4

1 に答える 1

4

最初にfilepathとfilenameを連結してから、server.mappathを使用してパスを取得する必要があります。

このようなコードを書く必要があります

string filePath = HttpContext.Current.Server.MapPath("~/FileUpload/UploadCWF.xlsx");

 System.IO.FileInfo FileName = new System.IO.FileInfo(filePath);
于 2013-02-18T05:57:25.827 に答える