从input type file中使用JavaScript下载文件

6

我正在创建一个Web应用程序,在其中我希望我的用户可以下载他们在input type="file"中选择的文件。

以下是我的HTML代码:

<input type='file' id='fieldID' onchange="return ValidateFileUpload('fieldID')"/>

现在我的JS代码

function ValidateFileUpload(ID) {

    var fuData = $('#' + ID);
    var FileUploadPath = fuData[0].value;

    //To check if user upload any file
    if (FileUploadPath == '') {

    } else {
        var Extension = FileUploadPath.substring(
            FileUploadPath.lastIndexOf('.') + 1).toLowerCase();

        //The file uploaded is an image

        if (Extension == "gif" || Extension == "png" || Extension == "bmp"
            || Extension == "jpeg" || Extension == "jpg" || Extension == "pdf" || Extension == "ppt" || Extension == "pptx" || Extension == "doc" ||Extension == "docx"
            || Extension == "xls" || Extension == "xlsx") {

            var file = $('#' + ID)[0].files[0];
            var filename = $('#' + ID)[0].files[0].name;
            var blob = new Blob([file]);
            var url = URL.createObjectURL(blob);

            $(this).attr({ 'download': FileUploadPath, 'href': url });
            filename = "";
        }

        //The file upload is NOT an image
        else {
            alert("Document is not the correct format: pdf,ppt,pptx,doc,docx,xls,xlsx and txt are the only document types allowed for upload. Please try again.");

        }
    }
}

但是我无法下载所选文件,你能帮我下载文件上传中选择的文件吗?

你需要在下载之前将它上传到服务器。 - Sumesh TG
你是想将这个文件上传到你的服务器吗?你当前使用的术语没有意义,因为它暗示着你想让用户下载他们已经拥有的文件。 - Rory McCrossan
1个回答

4
这应该能解决问题。
<script>
    function DownloadFile() {
        file = input.files[0];
        fr = new FileReader();
        fr.readAsDataURL(file);

        var blob = new Blob([file], { type: "application/pdf" });

        var objectURL = window.URL.createObjectURL(blob);
        console.log(objectURL);

        if (navigator.appVersion.toString().indexOf('.NET') > 0) {
            window.navigator.msSaveOrOpenBlob(blob, 'myFileName.pdf');
        } else {
            var link = document.createElement('a');
            link.href = objectURL;
            link.download = "myFileName.pdf";
            document.body.appendChild(link);
            link.click();
            link.remove();
        }
    }
</script>

<input type="file" id="input" />
<input type='button' value='Download' onclick='DownloadFile();'>

检查:https://utilitiesforprogrammers.blogspot.com/2019/01/download-file-from-input-type-file.html


嗨@Nuno,我尝试了这个例子。我理论上读了代码,它应该可以工作,但是对我来说它没有工作,你有任何想法为什么它不起作用吗?我还尝试了URL中的href链接,但它也没有工作。 - Jerin Stephen
输入的 ID 不正确(我的错)。我还改了脚本并添加了代码以在 IE 中运行。 - Nuno Dias
我正在使用Firefox 67.0.4(64位),但它无法正常工作。在IE中,我尝试上传PDF文件并尝试打开它,但是它无法打开并显示文件中存在错误。 - Jerin Stephen
问题是在JS中Firefox的点击...做这个: ... link.download = "myFileName.pdf"; document.body.appendChild(link); link.click(); link.remove(); ... 我也改变了代码 :) - Nuno Dias

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接