zoukankan      html  css  js  c++  java
  • 图片预览(base64和blob:图片链接)和ajax上传、下载(带进度提示)

    直接上代码

    html和js

    <!DOCTYPE html>
    
    <html>
    <head>
        <meta name="viewport" content="width=device-width" />
        <title>Index</title>
        <style>
            fieldset {
                width: 400px;
                height: 150px;
            }
    
            .uploadImg {
                width: 40px;
                height: 40px;
            }
    
            a {
                padding: 10px;
                text-decoration: none;
                border: 2px solid #e27b32;
                position: relative;
                top: 17px;
                left: 24%;
                color: #d46c6c;
                border-radius: 18px;
            }
    
            .outputContain {
                width: 400px;
                height: 56px;
                overflow-x: auto;
                overflow-y: hidden;
            }
        </style>
    </head>
    <body>
        <fieldset>
            <legend>上传图片-获取图片</legend>
            <div class="contain">
                <form enctype="multipart/form-data" method="post" name="form">
                    <input type="file" id="file" name="file" multiple="multiple" />
                </form>
                <div id="progress"></div>
                <div class="outputContain">
                    <div id="output"></div>
                </div>
                <a href="javascript:clear()">清空所有</a>
                <a href="javascript:uploadFile()">上传文件</a>
            </div>
        </fieldset>
    
    
        <a href="javascript:testReq()">测试请求</a>
    
        <script>
            'use strict'
    
            var progressTip = document.getElementById('progress'),
                outPutTip = document.getElementById('output'),
                fileInput = document.getElementById('file');
    
            //ajax+FormData上传文件
            function uploadFile() {
                var formData = new FormData(document.forms.namedItem('form'));
                var needResult = 0;
                formData.append('needResult', needResult);
                var xhr = new XMLHttpRequest();
                xhr.open('post', '/home/upload', true);
                xhr.setRequestHeader('testHeader', 'testHeader');
                xhr.timeout = 60 * 1000;
                xhr.ontimeout = function (event) {
                    progressTip.innerHTML = '超时(60s)';
                }
    
                xhr.onload = function (event) {
                    progressTip.innerHTML = '上传完成';
                    if (this.status === 200) {
                        //needResult == 1 && this.responseText.toString().split('|').forEach(function (url) {
                        //    getImg(url);
                        //});
                    } else {
                        progressTip.innerHTML = 'error:状态码:' + this.status + ' 错误消息:' + this.statusText;
                    }
                }
    
                xhr.upload.onprogress = function (event) {
                    if (event.lengthComputable) {
                        var pro = ((event.loaded / event.total).toFixed(4) * 100).toFixed(2);
                        progressTip.innerHTML = '上传进度:' + pro + '%<br/>';
                    }
                }
    
                xhr.send(formData);
            }
    
            //ajax下载文件
            function getImg(url) {
                var xhr = new XMLHttpRequest();
                xhr.open('get', url, true);
                xhr.responseType = 'blob';
                xhr.onload = function (e) {
                    if (this.status === 200) {
                        getFileReaderResult(this.response, function (result) {
                            appendImgToBox(result);
                        });
                    } else {
                        progressTip.innerHTML = '发生错误';
                    }
                }
                xhr.send();
            }
    
            //返回blog:图片链接的预览
            function getFileUrl(file) {
                var src = window.URL.createObjectURL(file);
                return src || '';
            }
    
            //FileReader读取文件,返回base64的图片
            function getFileReaderResult(blob, callback) {
                var fileReader = new FileReader();
                fileReader.readAsDataURL(blob);
                fileReader.onprogress = function (event) {
                    if (event.lengthComputable) {
                        var pro = ((event.loaded / event.total).toFixed(4) * 100).toFixed(2);
                        progressTip.innerHTML = '预览进度:' + pro + '%<br/>';
                    }
                }
                fileReader.onloadend = function () {
                    progressTip.innerHTML = '预览完成';
                    typeof callback === 'function' && callback(this.result);
                }
            }
    
            //添加一个预览图到预览列表里面
            function appendImgToBox(src) {
                outPutTip.innerHTML += '<image class="uploadImg" src="' + src + '"/>';
                var imgCount = document.getElementsByClassName('uploadImg').length,
                    singleImgWidth = document.getElementsByClassName('uploadImg')[0].offsetWidth;
                outPutTip.style.width = imgCount * singleImgWidth + 'px';
            }
    
            //重置页面
            function clear() {
                outPutTip.innerHTML = '';
                outPutTip.style.width = '0px';
                fileInput.value = '';
            }
    
            //选择文件后生产预览图
            fileInput.addEventListener('change', function (e) {
                for (var i = 0; i < e.target.files.length; i++) {
                    getFileReaderResult(e.target.files[i], function (result) {
                        appendImgToBox(result);
                    });
                }
            });
    
    
            function testReq() {
                var xhr = new XMLHttpRequest();
                xhr.open('post', '/home/add', true);
                xhr.onprogress = function (e) {
                    console.log(e);
                }
                xhr.upload.onprogress = function (e) {
                    console.log(e);
                }
    
                xhr.onload = function () {
                    if (this.status == 200) {
                        if (this.readyState == 4) {
                            alert('完成');
                        }
                    }
                }
                xhr.send();
            }
    
        </script>
    </body>
    </html>
    C#后台接收上传的文件
     public string Upload()
            {
                HttpFileCollectionBase files = Request.Files;
                string dirName = "Upload";
                string saveDir = Server.MapPath("~/" + dirName + "/");
                if (!Directory.Exists(saveDir)) Directory.CreateDirectory(saveDir);
                List<string> uploadedFiles = new List<string>();
                string baseUrl = Request.Url.Scheme + "://" + Request.Url.Host + ":" + Request.Url.Port + "/";
                for (int i = 0; i < files.Count; i++)
                {
                    HttpPostedFileBase file = files[i];
                    if (file.ContentLength == 0) continue;
                    FileInfo fileInfo = new FileInfo(file.FileName);
                    string fileName = Guid.NewGuid().ToString("N") + fileInfo.Extension,
                        savePath = Path.Combine(saveDir, fileName);
                    file.SaveAs(savePath);
    
    
                    uploadedFiles.Add(baseUrl + dirName + "/" + fileName);
                }
    
                return Request.Form["needResult"] == "1" ? string.Join("|", uploadedFiles) : string.Empty;
            }

    预览来一发:

  • 相关阅读:
    ImportError: libgthread-2.0.so.0: cannot open shared object file: No such file or directory
    pycocotools使用教程
    with torch.no_grad() 详解
    虚拟机Ubuntu上下载Pytorch显示超时
    Deep Layer Aggregation DLA网络的结构
    tgz文件解压命令
    install mysql at linux
    devops issue
    process data
    unittest
  • 原文地址:https://www.cnblogs.com/myesn/p/5939936.html
Copyright © 2011-2022 走看看