FileUpload不允许我保存

时间:2016-02-13 11:57:17

标签: c# asp.net file-upload webforms

我有一个令人困惑的问题。我正在尝试使用FileUpload。以下代码在本地运行良好:

    var postedFile = uploader.PostedFile;
    var fileName = Path.GetFileName(postedFile.FileName);
    var extension = Path.GetExtension(fileName);
    var newFile = Guid.NewGuid() + extension;
    var imageFilePath = Path.Combine(this.Server.MapPath("~/ProductImages"), newFile);
    uploader.SaveAs(imageFilePath);

但是当我在互联网上将我的代码发布到我的服务器时,会发生以下异常:

  

找不到路径 [...]

的一部分

当我将uploader.SaveAs(imageFilePath);更改为uploader.SaveAs(imageFilePath.Replace(this.Request.ServerVariables["APPL_PHYSICAL_PATH"], "..\\"));时,会发生以下异常:

  

SaveAs方法配置为需要有根路径,路径 [..] 不是root。

有人会告诉我如何使用上传器吗?我怎么能解决这个问题?

谢谢

5 个答案:

答案 0 :(得分:2)

您的代码没有问题。当您通过Web服务器运行应用程序时,操作系统中的用户管理Web服务器(例如,对于enginx或IIS中的应用程序池组,没有人)。 您应该为要保存数据的文件夹设置权限。这可以在托管文件管理器面板中完成,也可以直接访问操作系统。

答案 1 :(得分:1)

问题是本地帐户在Active Directory上的远程资源上无效 - 您需要以ComputerName $或Anonymous身份连接,具体取决于您使用的本地身份的类型。

我能够在调试模式上上传,但不能在已发布的网站上传,这可能对你有帮助Mohammad。

答案 2 :(得分:0)

您确定服务器上存在ProductImages文件夹吗?

您可以尝试拨打

Directory.CreateDirectory(this.Server.MapPath("~/ProductImages"))

保存文件之前。如果目录不存在,它将创建目录,如果存在则不执行任何操作。

答案 3 :(得分:0)

我终于通过设置文件夹的权限来解决问题。我为该文件夹设置了“应用程序池组”的写入权限,现在我可以通过我的应用程序上传任何文件。

由于

答案 4 :(得分:-1)

试试这个..上传并在数据库中插入值..

string filename = Path.GetFileName(FileUpload1.PostedFile.FileName);
                FileUpload1.SaveAs(Server.MapPath("~/" + filename));
                Stream str = FileUpload1.PostedFile.InputStream;             
                        con.Open();
                        SqlCommand cmds = new SqlCommand("insert into datas(name,path,types,pricing)values(@name,@path,@types,@pricing)", con);
                        cmds.Parameters.AddWithValue("@name",d);
                        cmds.Parameters.AddWithValue("@path", filename);
                        cmds.Parameters.AddWithValue("@types", RadioButton1.Text);
                        cmds.Parameters.AddWithValue("@pricing", "FineGrained");
                        cmds.ExecuteNonQuery();
                        Response.Write("<script>alert('successfully uploaded');</script>");