使用输入[type =" file"]提示用户保存文件

时间:2016-03-24 23:46:36

标签: php html

我正在尝试从input file标记中实现两个操作。我有以下输入:

<input id='file-input' name='attach' type='file' style='margin-left:15px;'/> 

这可以在messages.php中找到。我想要实现的是两件事:

  1. 如果上传的文件大小超过1mb(或者是不是图像的文件),则生成一个按钮,单击该按钮可打开save as菜单,用户可从中选择他们希望的位置下载数据。
  2. 其次,如上所述,如果文件大小低于1mb,则只需在页面上显示数据(仅适用于图像文件)。
  3. 我还有其他页面,我使用input type="file"上传个人资料图片,并在页面上显示了图像。但我不确定如何执行(1) - 如何打开用户可以保存数据的菜单?

4 个答案:

答案 0 :(得分:2)

只需使用Content-Disposition: attachment标头投放该文件,请参阅PHP Outputting File Attachments with Headers

答案 1 :(得分:1)

您无需伪造点击或其他内容。你可能需要这样的东西。

  1. 用户选择文件并单击“上传文件”按钮。
  2. 使用例如上传文件PHP。
  3. PHP使用正确的标题显示文件的内容。
  4. PHP确定文件是小于还是大于1MB。
    1. 如果文件较大,请设置强制用户下载文件的header(导致选择位置弹出)。
    2. 如果文件较小,请不要设置标题,导致文件显示在浏览器中。
  5. Italic 是用户操作,粗体是服务器操作。

答案 2 :(得分:1)

在其他不错的答案中,我会这样做。

我已经通过点击你建议的下载按钮来实现,如果文件大于1Mb,你会得到这样的下载 enter image description here

否则,如果文件少于1Mb,它只会在浏览器上显示如下: enter image description here

顺便说一下,代码是自我解释的。

PHP部分名为index.php

<?php
$filename = "test3.jpg";
$maxSize = 1000000; // 1Mb

if (isset($_POST['save']))
    fileHandler($filename, $maxSize);

function fileHandler($filename, $maxSize)
{
    $fileinfo = getimagesize($filename);
    $filesize = filesize($filename);
    $fp = fopen($filename, "rb");
    if ($fileinfo && $fp)
    {
        header("Content-Type: {$fileinfo['mime']}");
        if ($filesize > $maxSize)
        {
            header('Content-Disposition: attachment; filename="NewName.jpg"');
        }
        fpassthru($fp);
        exit;
    } else
    {
        echo "Error! please contact administrator";
    }
}

?>

index.php内的HTML部分,但重要的是此代码应该在php标记之后,而不是之前。

<form action="index.php" method="post">
    <button type="submit" style="border: 0; background: transparent" name="save">
        <img src="download.jpg" alt="submit" />
    </button>
</form>
  

注意:您的php文档直接使用<?php ...启动很重要,请read

答案 3 :(得分:0)

您可以通过获取图像mime类型并设置内容处置和内容类型标题来执行此操作:

$file = 'path/to/file';

    if (file_exists($file)) {

            $contents = file_get_contents($file);
            $fileSize = filesize($file);
            $image_info = getImageSize($file);
            $mimeType = $image_info['mime'];
            header("content-disposition: attachment; filename=" . basename($file));
            header("content-type:$mimeType");
            header("Content-length: $fileSize");
            echo $contents;
            exit;
    }