上传图像ASP.NET MVC

时间:2017-11-19 16:16:43

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

嘿我想上传图片并将该图片保存到文件夹,并将该图片的名称保存到DB中,此外我还使用模型绑定表格的其他字段。这是HttpPostedFileBase文件中的代码接收null我也在我的表单中使用enctype =“multipart / form-data”。

public ActionResult UmrahPackage(PackagesModel model, , HttpPostedFileBase file)
    {
        try
        {
            if (model.ID == 0)
            {
                String fileName = "";
                Pakage pkg = new Pakage();
                pkg.Title = model.Title;
                pkg.PackageDetail = model.PackageDetail;
                pkg.Duration = model.Duration;

                if (file != null)
                {
                    fileName = System.Guid.NewGuid().ToString() + System.IO.Path.GetExtension(file.FileName);
                    string physicalPath = Server.MapPath("~/Images/Uploads" + fileName);
                    // save image in folder
                    file.SaveAs(physicalPath);
                }}

另外我也在尝试这个但是我无法理解如何在文件夹中保存图像我的意思是SaveAs之前的对象实例 - >文件

if (Request.Files.Count > 0 && String.IsNullOrEmpty(Request.Files[0].FileName) == false)
                {
                    HttpPostedFileBase file;
                    fileName = System.Guid.NewGuid().ToString() + System.IO.Path.GetExtension(Request.Files[0].FileName);
                    string physicalPath = Server.MapPath("/uploads/profileimages/") + fileName;
                    file.SaveAs(physicalPath);
                }

我的表单看起来像,

    @using (Html.BeginForm("UmrahPackage", "Home", FormMethod.Post, new { enctype = "multipart/form-data"}))
                {
                    @Html.HiddenFor(model => model.ID)

                    <label>Title:</label>
                    @Html.TextBoxFor(model => model.Title)

                    <label>Upload Image</label>
                    <input type="file" id="imgInp">

                    <button type="submit" >Create</button>
                }

请帮助我,谢谢。

2 个答案:

答案 0 :(得分:0)

您的输入元素name属性值应与您的参数名称

匹配

由于您的HttpPostedFileBase参数名称为file,请为您的文件输入指定相同的名称。

<input type="file" name="file" />

现在提交表单时,模型活页夹将能够将您提交的表单数据映射到名为file的参数

我还建议您使用Path.Combine而不是字符串连接。

string physicalPath = Path.Combine(Server.MapPath("~/Images/Uploads"), fileName);

答案 1 :(得分:0)

我已参考此link来解决覆盖先前选择的文件的问题。但是这种方法导致了另一个问题。所选照片被复制。也就是说,如果我选择3张图片,则可以节省6张图片。 以下代码是我的javascript

            <input type="file" id="files" name="files" class="btn" style="color:white" multiple />


function previewImages() {
    linebreak = document.createElement("br");
    var preview = document.querySelector('#preview');
    if (this.files) {
        [].forEach.call(this.files, readAndPreview);
    }
    function readAndPreview(file) {
        // Make sure `file.name` matches our extensions criteria
        if (!/\.(jpe?g|png|gif)$/i.test(file.name)) {
            $('#files').val('');
            return alert(file.name + " is not an image");

        } else if (file.size > 4194304) {
            $('#files').val('');

            return alert(file.name + "is larger than 4MB");

        } else {
            var reader = new FileReader();
            reader.addEventListener("load", function () {
                var image = new Image();
                image.height = 100;
                image.title = file.name;
                image.src = this.result;
                preview.append(image.title);
                preview.appendChild(image);
            });
            reader.readAsDataURL(file);
        }
    }
}
//document.querySelector('#files').addEventListener("change", previewImages);
$(document).on('change', 'input[type="file"][multiple]', function () {
    var $this = $(this);
    $this.clone().insertAfter($this);
    $this.hide();

});

$(document).on('change', 'input[type="file"][multiple]', previewImages);