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组件

1.jsp页面:method必须为post,enctype="multipart/form-data"Html代码  
  • fly_buf
  • fly_buf
  • 2011年06月13日 17:56
  • 1001

使用fileupload组件实现文件上传

完整版见https://jadyer.github.io/
  • jadyer
  • jadyer
  • 2011年01月11日 16:36
  • 1473

JS 获得FileUpload1 的完整路径

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

获取FileUpload中的上传文件路径

//单击事件,完成上传文件到服务器 private void btnUpload_Click(object sender, System.EventArgs e)   {     if(file...

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

尝试了很多办法,都不能获取到文件的完整路径     //string pName = Server.MapPath(this.FileUpload1.PostedFile.FileName); //...

Controller获得上传文件的绝对路径

@RequestMapping(value = "/upload", method = RequestMethod.POST) public ModelAndView onSubmit(Htt...

文件上传路径问题

在linux服务器上部署的项目,当用到上传文件功能时,用到一些组件或者是组件上传文件时,需要将上传路径配置到根目录下,否则会出现找不到路径的问题; 例如配置路径为:uploadPath=/home/h...
  • yinkgh
  • yinkgh
  • 2015年01月13日 22:52
  • 1235

fileupload SaveAs 笔记;以及一次脑残的遭遇

fileupload常用的一些属性、方法有:            1.、   FileUpload.FileName//直接获取待上传文件的文件名           2、    FileUploa...
  • NO_544
  • NO_544
  • 2010年04月15日 15:38
  • 2571

Asp.Net 获取FileUpload控件的文件路径、文件名、扩展名

string fileNameNo = Path.GetFileName(FileUploadImg.PostedFile.FileName); //获取文件名和扩展名 string Director...
  • ldy592
  • ldy592
  • 2014年03月07日 11:38
  • 1924

解决input的file类型各浏览器的样式兼容

我们都希望做出的上传图片可以是以下这种美观的,但是原生的input file类型,不仅不美观 ,而且各浏览器都显示不同,如何解决呢?美观的 chrome下 firefox下 IE下 一般来说,...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:FileUpload上传文件时,为何不能获取到完整路径
举报原因:
原因补充:

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