2

我在我的项目中使用这个Ajax 文件上传并且它工作正常,我唯一的问题是如何保存我刚刚上传的照片的路径?基本上,我尝试在成功上传后将路径复制到 TextBox 控件,并用更新面板包围该文本框,并在调用 Ajax 的 SaveAs 方法后手动更新该面板,但它似乎不起作用。

这是上载完成事件的代码:

protected void AsyncFileUpload1_UploadedComplete (object sender, AjaxControlToolkit.AsyncFileUploadEventArgs e)
    {
        System.Threading.Thread.Sleep(3000);
        if (AsyncFileUpload1.HasFile)
        {
            var relativeFolder = DateTime.Now.Year.ToString(CultureInfo.InvariantCulture) + Path.DirectorySeparatorChar + DateTime.Now.Month +
                             Path.DirectorySeparatorChar;
            relativeFolder = relativeFolder.Replace('\\', '/');
            var folder = Utils.RelativeWebRoot + "PostPhotos/" + relativeFolder;
            var fileName = Path.GetFileName(e.FileName);

            AsyncFileUpload1.SaveAs(Server.MapPath(folder + fileName));

            txtPostPhoto.Text = folder + fileName;
            PostImage.ImageUrl = txtPostPhoto.Text;

            PostPhotoUpdatePanel.Update();
        }
    }

txtPostPhoto 是我的文本框。

PostImage 是我试图显示图像预览的地方。

还有另一种方法吗?

4

3 回答 3

1

仔细查看链接中的示例。

使用 AJAX 控件的以下属性:

OnClientUploadComplete="uploadComplete"

它是文件成功上传时在服务器端触发的 javascript 函数。您可以在此函数中设置文本框的值。

例子:

function uploadComplete(sender, args) {
    var txt= document.getElementById("ctl00_SampleContent_clientSide");//Your textbox id
    txt.value=args.get_fileName();
} 
于 2012-07-12T07:06:13.633 回答
0

您应该将路径保存在数据库中,而不是按名称保存,而应该通过创建 GUID 并使用 GUID 作为名称来保存。

为什么?

  1. 考虑两个图像具有相同名称的场景,其中一个显然会被覆盖,在这些情况下使用 GUID 会有所帮助。
  2. 如果您不再需要它,存储在数据库中可以帮助您识别或删除图像。
于 2012-07-12T05:36:19.607 回答
0

尝试在 ViewState 中保存 photopath

protected void AsyncFileUpload1_UploadedComplete (object sender, AjaxControlToolkit.AsyncFileUploadEventArgs e)
{
     ViewState["path"] = "your path"
     Page.ClientScript.RegisterHiddenField("vpath", ViewState("path"))
}

在客户端放置一个脚本标签,

<script type="text/javascript" >
    var vCode = document.getElementById("vpath");
</script>
于 2012-07-14T14:55:00.487 回答