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. 

相关文章推荐

使用Apache的FileUpLoad完成文件上传(源码+完整注释)

1.导入fileupload相关jar包 commons-fileupload-1.2.1.jar commons-io-1.4.jar 2.建立表单(包含文件上传三要素) enctype=...

解决ASP.NET中的FileUpload 不能上传大于4M文件的限制

ASP.NET的缺省设定只允许上传4M的文件,这是出于对网站安全性的考虑,为了防止网站受到Denial of Service attacks的攻击。 虽说是出于对网站安全性的考虑,但是程序却捕捉不到...

c# asp.net Ext file fileUpload文件上传后台Request.Files获取不到解决办法

今天在搞这个ux.fileUpload控件的时候杯具了一天,后台总是获取不到Files对象,google了一下午未果,晚上回来再试的的时候成功了,我用的版本是3.3的,用的FormPanel提交,在他...

使用apche.commons.fileupload进行文件上传时的工具类解说

一 主要API 1. DiskFileUpload类 DiskFileUpload类是Apache文件上传组件的核心类,应用程序开发人员通过这个类来与Apache文件上传组件进行交互。下面介绍Di...

struts2 使用 jakarta 上传文件时commons fileupload的异常捕捉(转自alfred.w)

struts2 使用 jakarta 上传文件时commons fileupload的异常捕捉(转自alfred.w) 问题:         struts2 使用jakarta ...

asp.net C#如何上传指定路径的图片,不用FileUpload控件[转]

using System;  using System.Data;  using System.Configuration;  using System.Web;  using System....

FileUpload控件上传不支持给定路径的格式 问题解决

string filepath = Server.MapPath("~/upload"); HttpFileCollection uploadFile = Request.Fi...

JS、JSP不能正确获取上传文件路径问题

问题1:在进行页面开发时,我们经常会要获取文件的路径,但是有时会出现文件路径错误的问题, JSP代码: JS代码: 此时,会出现如下问题:文件路径变为:C:\fakepath\*.txt...

使用Commons-fileupload 组件上传时,获取表单其它元素系列问题集锦

如果在表单中使用表单元素 ,浏览器在解析表单时,会自动生成一个输入框和一个按钮,输入框可供用户填写本地文件的文件名和路径名,按钮可以让浏览器打开一个文件选择框供用户选择文件:   当表单需要上传文...
  • M_none
  • M_none
  • 2012-05-02 16:24
  • 2003
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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