FileUpload上传文件时,为何不能获取到完整路径

转载 2012年03月23日 09:40:40

以前我用FileUpload.PostFile.Filename就可以获取了,但是现在发现不行了,查了很多资料,最后谜底揭开了

原来是我IE浏览器的安全性太高了,在工具-->Inernet-->安全-->自定义级别-->启用  “将文件上载到服务器并包含本地路径”

OK...


获取不到客户端的路径
HttpContext.Current.Server.MapPath(服务器路径)   这会返回一个服务器的完整路径
FileUpload1.SaveAs(一个字符串,指定服务器上用于保存上载文件的位置的完整路径。)
服务器端是不能获取的。
你可以利用客户端的JS + Hidden Field ,间接获取
FileUpload1.PostedFile.FileName 
JavaScript获取FileUpload上传文件的全路径
//函数功能,获取FileUpload上传文件的全路径
        function getFullPath(obj)
        {
            if(obj)
            {
                //ie
                if (window.navigator.userAgent.indexOf("MSIE")>=1)
                {
                    obj.select();
                    return document.selection.createRange().text;
                }
                //firefox
                else if(window.navigator.userAgent.indexOf("Firefox")>=1)
                {
                    if(obj.files)
                    {
                        return obj.files.item(0).getAsDataURL();
                    }
                    return obj.value;
                }
                return obj.value;
            }
        }
[code=C#][/code] string path = Server.MapPath(FileUpload1.FileName);
path就是全路径。
客户端文件路径:          PostedFile.FileName; 
文件名称:               FileInfo   file   =   new   FileInfo(name); 
                                string   fileName   =   file.Name;     
服务器端文件路径:Server.MapPath( " ");

IQueryable<Customers> tab1 = Customers;
List<string> myListOfStrings = new List<string> {"ALFKI", "ANATR", "ANTON"};
var predicate = PredicateBuilder.False<Customers>(); 

foreach (String m in myListOfStrings)
{
 string n = m;
 predicate = predicate.Or(c => c.CustomerID.Contains(n));
}

tab1 = tab1.Where(predicate);

The  PredicateBuilder's source code is available and can be included in your application.

Using PredicateBuilder:
http://www.albahari.com/nutshell/predicatebuilder.aspx

 

Marcel

You can follow Marcel’s suggestion, use PredicateBuilder to implement what you need.  Here is a complete example based on NorthWind database. 

private void button1_Click(object sender, EventArgs e)
{
  using (NorthWindDataContext ctx = new NorthWindDataContext())
  {
    List<string> myListOfStrings = new List<string> { "fish", "Seaweed" };

    var predicate = PredicateBuilder.False<Category>();
    foreach (string keyword in myListOfStrings)
    {
      string temp = keyword;
      predicate = predicate.Or(p => p.Description.Contains(temp));
    }

    IQueryable<Category> query = ctx.Categories.Where(predicate);

    //You can check the Commmand Text here 
    Console.WriteLine(ctx.GetCommand(query).CommandText);

    this.dataGridView1.DataSource = query;
  }
}


Below is the PredicateBuilder class.

public static class PredicateBuilder
{
  public static Expression<Func<T, bool>> True<T>() { return f => true; }
  public static Expression<Func<T, bool>> False<T>() { return f => false; }

  public static Expression<Func<T, bool>> Or<T>(this Expression<Func<T, bool>> expr1,
                            Expression<Func<T, bool>> expr2)
  {
    var invokedExpr = Expression.Invoke(expr2, expr1.Parameters.Cast<Expression>());
    return Expression.Lambda<Func<T, bool>>
       (Expression.OrElse(expr1.Body, invokedExpr), expr1.Parameters);
  }

  public static Expression<Func<T, bool>> And<T>(this Expression<Func<T, bool>> expr1,
                             Expression<Func<T, bool>> expr2)
  {
    var invokedExpr = Expression.Invoke(expr2, expr1.Parameters.Cast<Expression>());
    return Expression.Lambda<Func<T, bool>>
       (Expression.AndAlso(expr1.Body, invokedExpr), expr1.Parameters);
  }
}

 

If you have other question, please feel free to let me know.

 

Best regards,

Alex Liang

MSDN Subscriber Support in Forum
If you have any feedback on our support, please contact msdnmg@microsoft.com


Please remember to mark the replies as answers if they help and unmark them if they provide no help. 
Welcome to the All-In-One Code Framework! If you have any feedback, please tell us. 

获取FileUpload中的上传文件路径

//单击事件,完成上传文件到服务器 private void btnUpload_Click(object sender, System.EventArgs e)   {     if(file...
  • Robin022
  • Robin022
  • 2012年02月01日 22:10
  • 9575

FileUpload获取不到路径的问题

在一本书上发现的问题   到时只是练练手  发现当我用    UpLoadFile.PostedFile.FileName 获取完整路径的时候尽然获取不到   从网上找能很多资料   发现都是能够获取...
  • wyh0318
  • wyh0318
  • 2012年03月23日 10:26
  • 644

JS 获得FileUpload1 的完整路径

JS 获得FileUpload1 的完整路径由于安全方面因素,高版本浏览器不能获取上传图片,文件的完整路径,           这里在JS中进行获取:下面是JS函数:本人把它写入隐藏域了,  ...
  • zyp_tfy
  • zyp_tfy
  • 2010年12月20日 09:56
  • 4036

解决asp.net FileUpload控件无法获取完整路径的问题 - 无序修改浏览器参数

尝试了很多办法,都不能获取到文件的完整路径     //string pName = Server.MapPath(this.FileUpload1.PostedFile.FileName); //...
  • xiaoyiyz
  • xiaoyiyz
  • 2016年07月15日 09:52
  • 1242

FileUpload上传文件时,为何不能获取到完整路径

以前我用FileUpload.PostFile.Filename就可以获取了,但是现在发现不行了,查了很多资料,最后谜底揭开了 原来是我IE浏览器的安全性太高了,在工具-->Inernet-->...
  • wyh0318
  • wyh0318
  • 2012年03月23日 09:40
  • 947

SpringBoot+fileUpload获取文件上传进度

spring boot 通过 fileUpload 组件实现文件上传进度获取。
  • qq_27607579
  • qq_27607579
  • 2017年09月09日 14:10
  • 2016

FileUpload上传文件时,为何不能获取到完整路径

用FileUpload.PostFile.Filename获取不到完整路径,IE浏览器的安全性太高,在工具-->Inernet-->安全-->自定义级别-->启用  “将文件上载到服务器并包含本地路径...
  • ws297636199
  • ws297636199
  • 2010年09月21日 10:47
  • 1680

Struts2文件上传(二) 深入FileUploadInterceptor

Struts2框架本身没有文件上传的功能模块,而是利用现在流行的几个文件上传开源框架,如Common-FileUpload和COS等。Struts2利用拦截器将这些文件上传的框架巧妙的集成进来,不能不...
  • elong490
  • elong490
  • 2014年10月10日 09:17
  • 522

jqueryfileupload 客户端和服务端所需要的js文件

  • 2016年04月07日 11:14
  • 23KB
  • 下载

Springmvc fileupload上传

1、springmvc.xml必须配置:    2、 WEB-INF/lib下必加入:commons-fileupload.jar与commons-io-1.4.jar二个文件   3、 表...
  • moxiaoya1314
  • moxiaoya1314
  • 2016年12月06日 22:42
  • 189
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:FileUpload上传文件时,为何不能获取到完整路径
举报原因:
原因补充:

(最多只允许输入30个字)