如何获取上传文件的绝对路径?

JJYY0088 2012-12-01 03:53:02
由于浏览器的安全级别提升,所以默认情况下,在 新的浏览器(IE9、火狐、谷歌...)下,
上传控件属性 FileUpload1.PostedFile.FileName 已经获取不了文件的绝对路径,只能获取文件名。

问问:如何获取上传文件的绝对路径?

因为我想用 ajax + ashx 上传文件,ashx里头的方法要用到上传文件的绝对路径进行上传。
...全文
17184 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
走在四季 2014-10-31
  • 打赏
  • 举报
回复
谷歌上传服务器后可以正常获取文件路径,但IE却不行。。不知道为啥。
v_yao 2012-12-03
  • 打赏
  • 举报
回复
Server.MapPath(); Request.MapPath();
JJYY0088 2012-12-03
  • 打赏
  • 举报
回复
我找了一个文件上传方法,第一个参数就是 绝对路径

#region 文件上传
/// <summary>       
/// 上传文件(自动分割)       
/// </summary>       
/// <param name="filePath">待上传的文件全路径名称(@"E:\FTP\ftproot\20070228DQCK.zip")</param>       
/// <param name="hostURL">服务器的地址</param>       
/// <param name="byteCount">分割的字节大小</param>               
/// <param name="userID">主机用户ID</param>       
/// <param name="cruuent">当前字节指针</param>       
/// <returns>成功返回"";失败则返回错误信息</returns>
public string UpLoadFile(string filePath, string hostURL, int byteCount, string userID, long cruuent)
{
    string tmpURL = hostURL;
    byteCount = byteCount * 1024;
    System.Net.WebClient WebClientObj = new System.Net.WebClient();
    FileStream fStream = new FileStream(filePath, FileMode.Open, FileAccess.Read);
    BinaryReader bReader = new BinaryReader(fStream);
    long length = fStream.Length;
    string sMsg = "版式上传成功";
    string fileName = filePath.Substring(filePath.LastIndexOf('\\') + 1);
    try
    {
        #region 续传处理
        byte[] data;
        if (cruuent > 0)
        {
            fStream.Seek(cruuent, SeekOrigin.Current);
        }
        #endregion

        #region 分割文件上传
        for (;cruuent <= length; cruuent = cruuent + byteCount)
        {
            if (cruuent + byteCount > length)
            {
                data = new byte[Convert.ToInt64((length - cruuent))];
                bReader.Read(data, 0, Convert.ToInt32((length - cruuent)));
            }
            else
            {
                data = new byte[byteCount];
                bReader.Read(data, 0, byteCount);
            }
            try
            {
                hostURL = tmpURL + "&action=upload" + "&filename=" + fileName + "&userid=" + userID + "&npos=" + cruuent.ToString();
                //hostURL = tmpURL + DateTime.Now.ToString("yyyyMMddHHmmssfff") + ".txt";
                byte[] byRemoteInfo = WebClientObj.UploadData(hostURL, "POST", data);
                string sRemoteInfo = System.Text.Encoding.Default.GetString(byRemoteInfo);
                //  获取返回信息                        
                if (sRemoteInfo.Trim() != "")
                {
                    sMsg = sRemoteInfo;
                    break;
                }
            }
            catch (Exception ex)
            {
                sMsg = ex.ToString();
                break;
            }
        }
        #endregion
    }
    catch (Exception ex)
    {
        sMsg = sMsg + ex.ToString();
    }

    try
    {
        bReader.Close();
        fStream.Close();
    }
    catch (Exception exMsg)
    {
        sMsg = exMsg.ToString();
    }
    GC.Collect();
    return sMsg;
}
#endregion


  • 打赏
  • 举报
回复
引用 楼主 LXH060204 的回复:
ashx里头的方法要用到上传文件的绝对路径进行上传
什么意思呢?你的服务器上的程序可以跑到人家上网用户的客户端去抓文件?
小孩快跑 2012-12-02
  • 打赏
  • 举报
回复
我是来看帖的
CSMSDN 2012-12-02
  • 打赏
  • 举报
回复
是的,本地都获取不了绝对路径,只有上传到服务器,保存后,可以获取文件在服务器的绝对路径
吉普赛的歌 2012-12-01
  • 打赏
  • 举报
回复
引用 楼主 LXH060204 的回复:
由于浏览器的安全级别提升,所以默认情况下,在 新的浏览器(IE9、火狐、谷歌...)下, 上传控件属性 FileUpload1.PostedFile.FileName 已经获取不了文件的绝对路径,只能获取文件名。 问问:如何获取上传文件的绝对路径? 因为我想用 ajax + ashx 上传文件,ashx里头的方法要用到上传文件的绝对路径进行上传。 ……
不要痴心妄想了。 你的目标是:无刷新上传对吧? 用jquery的无刷新上传插件, 其原理也是造了一个iframe, 隐性地弄了一个新页面出来上传的
JJYY0088 2012-12-01
  • 打赏
  • 举报
回复
引用 4 楼 kongwei521 的回复:
这个兼容IE9 FF3 之类
我的IE9 就不能!
JJYY0088 2012-12-01
  • 打赏
  • 举报
回复
引用 6 楼 slyzly 的回复:
js无法获取到,兼容性也不好,flash可以获取到,不过不懂flash的,做也要花很长一段时间 上传一定要用ajax + ashx 来实现吗?不能换一种思路?
我有这个需求
事理 2012-12-01
  • 打赏
  • 举报
回复
js无法获取到,兼容性也不好,flash可以获取到,不过不懂flash的,做也要花很长一段时间 上传一定要用ajax + ashx 来实现吗?不能换一种思路?
某些人 2012-12-01
  • 打赏
  • 举报
回复
?Ie能获取
蝶恋花雨 2012-12-01
  • 打赏
  • 举报
回复
这个兼容IE9 FF3 之类
JJYY0088 2012-12-01
  • 打赏
  • 举报
回复
引用 2 楼 kongwei521 的回复:
<input id="myfile" type="file" /> <br /> <img src="" alt="Image to be upload." /> <div id="info"></div> <script type="text/javascript"> var dFile = document.getElementById('myfile');……
js的做法不可能兼容
蝶恋花雨 2012-12-01
  • 打赏
  • 举报
回复
<input id="myfile" type="file" /> <br /> <img src="" alt="Image to be upload." /> <div id="info"></div> <script type="text/javascript"> var dFile = document.getElementById('myfile'); var dImg = document.getElementsByTagName('img')[0]; var dInfo = document.getElementById('info'); dFile.onchange = function(){ if(!dFile.value.match(/.jpg|.gif|.png|.bmp/i)){alert('File type must be: .jpg, .gif, .bmp or .png !');return;} if(dFile.files){ dImg.src = dFile.files[0].getAsDataURL(); alert(dImg.src); }else if(dFile.value.indexOf('\\') > -1 || dFile.value.indexOf('\/') > -1){ dImg.src = dFile.value; alert(dImg.src); } } </script> 输出 完整路径。
SomethingJack 2012-12-01
  • 打赏
  • 举报
回复
要考虑兼容性神马的还是使用Jquary插件吧 推荐Uploadify

62,041

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧