2

我正在尝试通过单击某个元素中的现有图像来上传图像。

因此,用户将单击图像,将显示文件上传对话框,当用户从文件对话框中选择图像时,表单会自动提交表单并重新加载页面。

这是我的一些代码:

$(document).ready(function() {
        $('#profile').click(function(e){
            $('#fileUploadField').click();
            e.preventDefault();
        });
    header('Location: ' . $current_file);
    });

<form action="" method="post" enctype="multipart/form-data">
    <input type="file" name="profile" id="fileUploadField"> <input type="submit">
</form>

配置文件 div 是包含图像的位置

我已经有了显示图像的代码。我只需要打开对话框,然后在关闭时提交表单并刷新页面。

这是我的其他代码:

<?php
        if (isset($_FILES['profile']) === true) {
            if (empty($_FILES['profile']['name']) === true) {
                echo 'Please choose a file!';
            } else {
                $allowed = array('jpg', 'jpeg', 'gif', 'png');

                $file_name = $_FILES['profile']['name'];
                $file_extn = strtolower(end(explode('.', $file_name)));
                $file_temp = $_FILES['profile']['tmp_name'];

                if (in_array($file_extn, $allowed) === true) {
                    change_profile_image($session_user_id, $file_temp, $file_extn);

                    header('Location: ' . $current_file);
                    exit();

                } else {
                    echo 'Incorrect file type. Allowed: ';
                    echo implode(', ', $allowed);
                }
            }
        }

        if (empty($user_data['picture']) === false) {
            echo '<img src="', $user_data['picture'], '" alt="', $user_data['firstname'], '\'s Profile Image" style="height:100px">';
        }
        ?>
4

5 回答 5

5

通过单击其他内容很难触发类型文件的输入。您将遇到的最大问题是 IE 会将此视为安全问题,并且可能不允许您这样做(如果输入被隐藏)。为了解决这个问题,您可以“淡化”图像后面的输入,这样当用户单击图像时,他们实际上是在单击文件输入。

您的 html 可能如下所示:

<div class="hiddenFileInputContainter">
    <img class="fileDownload" src="/images/ico_upload.png">
    <input type="file" name="fileUp" class="hidden" accept="image/*">
</div>

然后您需要将输入的不透明度设置为零,以使其后面的图像可见,而无需实际从页面中删除输入:

input[type='file'].hidden
{
    margin: 0;
    padding: 0;
    position: absolute;
    top: 0;
    right: 0;
    height: 100%;
    font-size: 50px;
    cursor: pointer;
    opacity: 0;
    -moz-opacity: 0;
    filter: Alpha(Opacity=0);
}

您还需要设置图像和容器的尺寸:

img.fileDownload
{
    height: 26px;
    width: 26px;
    padding: 0;
    display: inline-block; 
    vertical-align: middle;
    margin: 0 4px 0 0;
    cursor: pointer;
    position: absolute;
    top: 0;
    left: 0;
}

div.hiddenFileInputContainter
{
    position: relative;
    display: inline-block;
    width: 27px;
    height: 27px;
    overflow: hidden;
    vertical-align: middle;
    cursor: pointer;
}

请注意,输入的尺寸是溢出的,因此无论您在哪里单击容器,都会点击其中的输入。输入应尽可能大,并且按钮的实际尺寸在容器和图像上设置。

一旦您设法打开对话框,提交表单只需执行以下操作:

$("#fileUploadField").on("change", function() {
    $("#formId").submit();
});
于 2013-05-22T16:53:11.097 回答
3

请参阅用户hardsetting的帖子以获得更轻量级和(IMO)更好的解决方案:

<div class="image-upload">
<label for="file-input">
    <img src="placeholder.jpg"/>
</label>

<input id="file-input" type="file"/>
</div>

CSS:

.image-upload > input
{
   display: none;
}

用图像替换输入类型=文件

于 2013-10-24T11:22:09.290 回答
2
<div class="col-lg-10">

<input type="file" id='upload' class="col-lg-2 form-control" name="img"  onchange="readURL(this);" style="visibility: hidden; width: 1px; height: 1px"/>            

<a href="" onclick="document.getElementById('upload').click(); return false"><img id="blah" src="https://www.digitalocean.com/assets/media/fccmodal/github-c9188b0b.svg" alt="your image" style="width: 250px; height: 250px;"/></a>

</div>

一些jQuery:

function readURL(input) {
        if (input.files && input.files[0]) {
            var reader = new FileReader();

            reader.onload = function (e) {
                $('#blah')
                    .attr('src', e.target.result);
            };

            reader.readAsDataURL(input.files[0]);
        }
    }
于 2017-08-08T11:27:30.553 回答
2

我有更好的解决方案,

因为我在 MVC 应用程序中有相同的要求。

HTML : 显示从后端绑定的图像的图像标记,

<img class='img img-responsive img-thumbnail' onclick='return OpenFileBrowser(event)' src="@Model.PictureContentBase" alt="" style="cursor:pointer;" />

<input type="file" name="PicturePath" id="fileUpload" accept=".png,.jpg,.jpeg,.gif,.tif" />

JQuery:单击该图像标签,

function OpenFileBrowser(elem) {
    $('#fileUpload').click()
}

所以,我的 fileUpload 选择文件,将其存储到 PicturePath,当我发布表单时,我在后端获得了选定的图像......

于 2016-04-11T10:16:50.757 回答
1
       <!-- button to open popup -->
        <a href="#yourpopup" data-rel="popup" data-role="button" data-position-to="window" data-transition="flip">Open Popup</a>


        <div data-role="popop" id="yourpopup">
           <form id="yourform">
              ....inputs
            <button type="submit"> submit form</button>
        </div>


       <script>
           $('#yourform').submit( function() {
                $('#yourpopup').popup("close");
           });
       </script>

那是基本的。一般的想法会让你到达那里。我假设您想要 jquery,因为它在您的标签之一中。

于 2013-05-22T16:19:35.337 回答