如何使用fileupload控件上载图像并将其保存在其他位置

时间:2013-06-26 06:16:21

标签: c# asp.net-mvc-4 file-upload razor image-upload

我开发了一个mvc4 razor web应用程序来上传一个人的图像并将其保存在一个自定义的loaction(文件夹)中。

它有一个文件上传控件,一个文本框和一个按钮。当我使用文件上传控件上传图像时,我需要将其保存在自定义位置,如“D:/ Employee / ContactImage”,文件名应该是在文本框中键入的值。

这是视图中的代码

<div id="partial">
            @{Html.RenderPartial("WholeSaleUserDetail");}
            @using (Html.BeginForm("FileUpload", "WholeSaleTrade", new RouteValueDictionary(new { @class = "mainForm" }), FormMethod.Post, new { enctype = "multipart/form-data" }))
            {  
                <input name="uploadFile" type="file" id="fileUpload"/>
                <input type="submit" value="Save Image" id="saveImage" />
                <input type="text" id="imageName">

            }
            <div style="width: 200px; height: 200px;">
                <img id="empimage" src="../../Images/no_image.jpg" alt="" /></div>
        </div>

这是控制器类的代码

[HttpPost]
    public ActionResult FileUpload(HttpPostedFileBase uploadFile, string imageName) 
    {
        var j = new ImageJob(uploadFile, "~/Img/resize/" + imageName, new ResizeSettings(300, 300, FitMode.Stretch, "Jpeg"));
        j.Build();
        string imageUrl = PathUtils.GuessVirtualPath(j.FinalPath);

        return Json(imageUrl, JsonRequestBehavior.AllowGet);
    }

我需要做的就是将文本框的值作为文件名传递,并将图像保存在给定的位置。 请帮帮我..

1 个答案:

答案 0 :(得分:0)

我发现代码有问题,输入字段的NAME需要与控制器参数匹配。在你的情况下,html输入没有名称,试试这个。

<div id="partial">
        @{Html.RenderPartial("WholeSaleUserDetail");}
        @using (Html.BeginForm("FileUpload", "WholeSaleTrade", new RouteValueDictionary(new { @class = "mainForm" }), FormMethod.Post, new { enctype = "multipart/form-data" }))
        {  
            <input name="uploadFile" type="file" id="fileUpload"/>
            <input type="submit" value="Save Image" id="saveImage" />
            <input type="text" id="imageName" name="uploadFile">

        }
        <div style="width: 200px; height: 200px;">
            <img id="empimage" src="../../Images/no_image.jpg" alt="" /></div>
    </div>

对于控制器,您可以通过发布的文件获取文件名(它有一个属性)

[HttpPost]
public ActionResult FileUpload(HttpPostedFileBase uploadFile) 
{
    var j = new ImageJob(uploadFile, "~/Img/resize/" + uploadFile.FileName, new ResizeSettings(300, 300, FitMode.Stretch, "Jpeg"));
    j.Build();
    string imageUrl = PathUtils.GuessVirtualPath(j.FinalPath);

    return Json(imageUrl, JsonRequestBehavior.AllowGet);
}