我有一个令人困惑的问题。我正在尝试使用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。
有人会告诉我如何使用上传器吗?我怎么能解决这个问题?
谢谢
答案 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>");