【问题标题】:Kendo UI Upload, how to get the path url after uploading file(s) succesfulKendo UI Upload,上传文件后如何获取路径url)成功
【发布时间】:2013-03-06 02:50:33
【问题描述】:

我有一个问题。 我使用 Kendo UI for ASP.NET MVC 为我的 Web 应用程序创建上传功能。它运作良好,但问题是用户在单击上传按钮执行提交表单并导航到其他页面后看不到他们之前上传的文件。在这种情况下,我在创建视图中放置了一个上传器,我希望在将文件上传到服务器后,将该文件的链接存储到数据库中我的模型的一个字段中,但它总是得到空值。这里有人可以给我一些建议吗?太感谢了。这是我使用的代码。 * 控制器:

[HttpPost]
public ActionResult Create(Model model)
{
if(ModelState.IsValid)
{
   model.Url = Url;
   Db.Models.Add(model);
   Db.SaveChanges();
   return RedirectToAction("Index");
}
return View(model);
}

public ActionResult Save(IEnumerable<HttpPostedFileBase> attachments)
        {
            // The Name of the Upload component is "attachments"
            foreach (var file in attachments)
            {
                // Some browsers send file names with full path. We only care about the file name.
                var fileName = Path.GetFileName(file.FileName);
                var destinationPath = Path.Combine(Server.MapPath("~/Contents/files/"), fileName);

                DestinationPath = destinationPath;

                file.SaveAs(destinationPath);
            }

            // Return an empty string to signify success
            return Content("");
        }

查看

@using (Html.BeginForm()) {



  @Html.ValidationSummary(true)
    <div class="editor-label">
            Upload file
        </div>
        <div style="width:45%">
            @Html.Kendo().Upload().Name("attachments").Async(async => async.Save("Save", "Model").AutoUpload(true)).Multiple(false)
        </div>
    <p>
            <input type="submit" value="Create" class="k-button" />
        </p>

型号

public string Url {get;set;}

【问题讨论】:

  • 不确定我是否理解您的问题。让我解释一下:在创建视图中,您有一个异步剑道上传。用户使用它来上传文件。然后单击视图上的保存以提交表单。但是保存的模型没有上传文件的链接。是这个问题吗?
  • 是的,我不知道从哪里获取文件的链接以保存到 Url。

标签: kendo-ui


【解决方案1】:

客户端代码:

@(Html.Kendo().Upload()
        .Name("uploadTagImage")
        .Multiple(false)
        .Async(async => async.Save("ApiUploadImage", "Tag").SaveField("files").AutoUpload(true))
        .Events(events =>
                    {
                        events.Success("PV_Upload_TagImage_OnSuccess");
                    })
)  

<script type="text/javascript">
    // Events
    PV_Upload_TagImage_OnSuccess = function (result) {
        var data = result.response.Data;

        if(data.length > 0) {
            $("#tag-image").attr('src', data[0]);
        }

        $.publish("PV_Grid_Access_OnAddNewRecord_Event");
    };
</script>

服务器端代码:

public ActionResult ApiUploadImage([DataSourceRequest] DataSourceRequest request, IEnumerable<HttpPostedFileBase> files)
{
    var savedFilePaths = new List<string>();
    var applicationPath = System.Web.HttpContext.Current.Request.Url.Scheme + "://" + System.Web.HttpContext.Current.Request.Url.Authority + System.Web.HttpContext.Current.Request.ApplicationPath + "/Content/Images/Others/";
    if(files != null)
    {
        foreach(var file in files)
        {
            var fileName = Path.GetFileName(file.FileName);                    
            if(fileName !=null)
            {
                fileName = DateTime.Now.ToString("yyyyMMddmm-") + fileName;
                var imagePath = Path.Combine(Server.MapPath("~/Content/Images/Others/"), fileName);
                file.SaveAs(imagePath);
                savedFilePaths.Add(applicationPath + fileName);
            }
        }
    }

    return Json(new[] {savedFilePaths}.ToDataSourceResult(request));
}

【讨论】:

  • 谢谢。这是正确的答案。它应该被标记为答案。
【解决方案2】:

您不必返回空字符串。你可以返回任何你想要的字符串值。

为此,您需要将响应内容类型设置为“text/plain”。

Response.ContentType = "text/plain";

【讨论】:

    猜你喜欢
    • 2019-07-27
    • 1970-01-01
    • 2017-05-31
    • 1970-01-01
    • 1970-01-01
    • 2022-12-07
    • 2016-01-14
    • 1970-01-01
    • 2018-12-11
    相关资源
    最近更新 更多