`

File API 实现 上传功能

 
阅读更多

File API是HTML 5标准

 

具体的HTML 5的定义如下:

http://www.w3.org/TR/FileAPI/

 

 

下面我们来实践一下:

 

1.首先我们要判断浏览器是否支持FIle API

 

// Check for the various File API support.
if (window.File && window.FileReader && window.FileList && window.Blob) {
  // Great success! All the File APIs are supported.
} else {
  alert('The File APIs are not fully supported in this browser.');
}

 

 很简单,就是用window对象来判断的。

2.然后我们就实装一下

2.1 我们使用input标签来实现File API

 

<input type="file" id="files" name="files[]" multiple />
<output id="list"></output>

<script>
  function handleFileSelect(evt) {
    var files = evt.target.files; // FileList object

    // files is a FileList of File objects. List some properties.
    var output = [];
    for (var i = 0, f; f = files[i]; i++) {
      output.push('<li><strong>', escape(f.name), '</strong> (', f.type || 'n/a', ') - ',
                  f.size, ' bytes, last modified: ',
                  f.lastModifiedDate.toLocaleDateString(), '</li>');
    }
    document.getElementById('list').innerHTML = '<ul>' + output.join('') + '</ul>';
  }

  document.getElementById('files').addEventListener('change', handleFileSelect, false);
</script>

 

 如果有点javascript基础的人都明白上面是什么意思:

操作为将桌面的图标或者我们电脑的图片拖进input标签内,就能看到实践效果

 

2.2用div来实现File API

 

 

<div id="drop_zone">Drop files here</div>
<output id="list"></output>

<script>
  function handleFileSelect(evt) {
    evt.stopPropagation();
    evt.preventDefault();

    var files = evt.dataTransfer.files; // FileList object.

    // files is a FileList of File objects. List some properties.
    var output = [];
    for (var i = 0, f; f = files[i]; i++) {
      output.push('<li><strong>', escape(f.name), '</strong> (', f.type || 'n/a', ') - ',
                  f.size, ' bytes, last modified: ',
                  f.lastModifiedDate.toLocaleDateString(), '</li>');
    }
    document.getElementById('list').innerHTML = '<ul>' + output.join('') + '</ul>';
  }

  function handleDragOver(evt) {
    evt.stopPropagation();
    evt.preventDefault();
    evt.dataTransfer.dropEffect = 'copy'; // Explicitly show this is a copy.
  }

  // Setup the dnd listeners.
  var dropZone = document.getElementById('drop_zone');
  dropZone.addEventListener('dragover', handleDragOver, false);
  dropZone.addEventListener('drop', handleFileSelect, false);
</script>

 

 

 

操作如上

 

2.3用FIleReader实现File API

 

<style>
  .thumb {
    height: 75px;
    border: 1px solid #000;
    margin: 10px 5px 0 0;
  }
</style>

<input type="file" id="files" name="files[]" multiple />
<output id="list"></output>

<script>
  function handleFileSelect(evt) {
    var files = evt.target.files; // FileList object

    // Loop through the FileList and render image files as thumbnails.
    for (var i = 0, f; f = files[i]; i++) {

      // Only process image files.
      if (!f.type.match('image.*')) {
        continue;
      }

      var reader = new FileReader();

      // Closure to capture the file information.
      reader.onload = (function(theFile) {
        return function(e) {
          // Render thumbnail.
          var span = document.createElement('span');
          span.innerHTML = ['<img class="thumb" src="', e.target.result,
                            '" title="', escape(theFile.name), '"/>'].join('');
          document.getElementById('list').insertBefore(span, null);
        };
      })(f);

      // Read in the image file as a data URL.
      reader.readAsDataURL(f);
    }
  }

  document.getElementById('files').addEventListener('change', handleFileSelect, false);
</script>
 

 

操作如上

 

2.4 有ProcessBar的File API实现

 

 

<style>
  #progress_bar {
    margin: 10px 0;
    padding: 3px;
    border: 1px solid #000;
    font-size: 14px;
    clear: both;
    opacity: 0;
    -moz-transition: opacity 1s linear;
    -o-transition: opacity 1s linear;
    -webkit-transition: opacity 1s linear;
  }
  #progress_bar.loading {
    opacity: 1.0;
  }
  #progress_bar .percent {
    background-color: #99ccff;
    height: auto;
    width: 0;
  }
</style>

<input type="file" id="files" name="file" />
<button onclick="abortRead();">Cancel read</button>
<div id="progress_bar"><div class="percent">0%</div></div>

<script>
  var reader;
  var progress = document.querySelector('.percent');

  function abortRead() {
    reader.abort();
  }

  function errorHandler(evt) {
    switch(evt.target.error.code) {
      case evt.target.error.NOT_FOUND_ERR:
        alert('File Not Found!');
        break;
      case evt.target.error.NOT_READABLE_ERR:
        alert('File is not readable');
        break;
      case evt.target.error.ABORT_ERR:
        break; // noop
      default:
        alert('An error occurred reading this file.');
    };
  }

  function updateProgress(evt) {
    // evt is an ProgressEvent.
    if (evt.lengthComputable) {
      var percentLoaded = Math.round((evt.loaded / evt.total) * 100);
      // Increase the progress bar length.
      if (percentLoaded < 100) {
        progress.style.width = percentLoaded + '%';
        progress.textContent = percentLoaded + '%';
      }
    }
  }

  function handleFileSelect(evt) {
    // Reset progress indicator on new file selection.
    progress.style.width = '0%';
    progress.textContent = '0%';

    reader = new FileReader();
    reader.onerror = errorHandler;
    reader.onprogress = updateProgress;
    reader.onabort = function(e) {
      alert('File read cancelled');
    };
    reader.onloadstart = function(e) {
      document.getElementById('progress_bar').className = 'loading';
    };
    reader.onload = function(e) {
      // Ensure that the progress bar displays 100% at the end.
      progress.style.width = '100%';
      progress.textContent = '100%';
      setTimeout("document.getElementById('progress_bar').className='';", 2000);
    }

    // Read in the image file as a binary string.
    reader.readAsBinaryString(evt.target.files[0]);
  }

  document.getElementById('files').addEventListener('change', handleFileSelect, false);
</script>
 

 

 

 

 

分享到:
评论

相关推荐

    .NET webapi实现文件上传功能

    以上就是.NET WebAPI实现文件上传功能的详细步骤,以及如何在MVC中调用该API。在实际开发中,你可能还需要考虑其他因素,如并发处理、文件存储策略等。希望这些信息能帮助你理解和实现文件上传功能。

    jQuery插件jcrop+Fileapi完美实现图片上传+裁剪+预览的代码分享

    - 使用`FileAPI.upload`来实现图片的上传功能。 整个过程在前端完成,不需要后端代码参与,减少了服务器的压力,同时也降低了网络延时对用户操作的影响,提高了响应速度和用户体验。需要注意的是,虽然大多数现代...

    调用WebApi接口上传文件

    在实际项目中,还要注意性能优化、错误处理和安全性检查,以提供稳定可靠的文件上传功能。在提供的`MvcUploadFile`示例中,可能包含了实现这些功能的代码示例,你可以参考并根据自己的需求进行调整。

    asp net core3.1 webapi 上传功能

    ASP.NET Core 3.1 WebAPI 上传功能详解 在ASP.NET Core 3.1中,WebAPI提供了强大的功能来处理文件上传,这使得开发者能够构建健壮的、高效的文件上传系统。本教程将深入探讨如何在WebAPI中实现文件上传,并通过实际...

    Webapi 文件上传

    在Web开发中,WebAPI是ASP.NET框架的一部分,用于构建RESTful服务,它允许客户端(如浏览器、移动应用或桌面应用)通过HTTP协议与服务器...理解并熟练掌握这些知识点,可以帮助开发者实现安全、高效的文件上传功能。

    API实现FTP上传.rar

    在IT行业中,API(应用程序接口)是软件系统之间交互的一种方式,它定义了不同软件组件如何相互作用。在这个“API实现FTP上传”的...易语言提供的API源码可以作为学习和参考,帮助开发者快速实现文件的FTP上传功能。

    易语言API实现FTP上传源码

    5. `TransmitFile`:将本地文件的数据传输到已打开的FTP服务器文件中,实现上传功能。 6. `FtpCloseFile`:关闭FTP服务器上的文件。 7. `InternetCloseHandle`:关闭会话句柄,释放资源。 8. `WSACleanup`:清理网络...

    Synology_File_Station_API_Guide.pdf

    通过File Station的API,开发者可以集成这些功能到自己的应用程序中,实现自动化工作流程或定制化服务。 文档中的版权声明强调,所有技术信息均属于Synology公司的财产,未经书面许可,不得复制或用于设计、制造或...

    Imageupload使用FileAPI上传普通文件

    总的来说,"Imageupload"项目展示了如何结合JavaScript的File API和Canvas API实现图片的客户端压缩,再通过HTTP请求将压缩后的文件上传至服务器。这个过程涵盖了前端文件操作、图片处理、异步通信等多个技术点,是...

    用Canvas+Javascript FileAPI 实现一个图片剪切、滤镜处理、上传下载工具.pdf

    标题中的“用Canvas+Javascript FileAPI 实现一个图片剪切、滤镜处理、上传下载工具”指的是使用HTML5的Canvas元素和File API来创建一个功能丰富的图像编辑应用程序。Canvas是HTML5提供的一种画布,允许开发者通过...

    js input file多个文件上传功能.zip

    在JavaScript(JS)中,实现一个输入元素`&lt;input type="file"&gt;`的多文件上传功能是一项常见的需求,尤其在Web开发中。这个"js input file多个文件上传功能.zip"包含了一个实现这一功能的代码示例,适用于图片和其他...

    FileAPI — 一组用于处理文件的 javascript工具_多重上传、拖放和分块文件上传_JavaScript_代码_下载

    FileAPI就是这样一个专门用于处理文件的JavaScript库,它提供了丰富的功能,让开发者能够轻松实现多重上传、拖放操作以及分块文件上传。这些特性对于现代Web应用程序来说尤其重要,因为它们极大地提升了用户体验并...

    PHP使用HTML5 FileApi实现Ajax上传文件功能示例

    总结来说,PHP结合HTML5 File API和Ajax技术,可以实现无缝的文件上传功能,提供更好的交互体验。开发者需要注意的是,由于File API是HTML5的新特性,确保目标用户的浏览器支持此功能是必要的。同时,为了保证安全性...

    VB API 实现FTP上传下载源代码

    在VB(Visual Basic)环境中,我们可以使用API(Application Programming Interface)来实现FTP的功能,如文件的上传和下载。API是操作系统提供的一组函数,允许开发者直接与操作系统交互,执行特定任务。在VB中,...

    单file控件批量上传文件

    实现这一功能的关键在于HTML5的File API,它允许开发者对本地文件进行操作,包括读取、选择和上传。在HTML中,我们可以使用`&lt;input type="file" multiple&gt;`来创建一个支持多选的file控件。`multiple`属性使得用户...

    ASP.NET WebAPI 实现文件上传下载缩略图访问

    在本场景中,我们将探讨如何利用ASP.NET WebAPI来实现文件的上传、下载以及图片的缩略图访问。 一、文件上传: 在ASP.NET WebAPI中,文件上传通常通过HttpPostedFileBase对象来处理。开发者需要创建一个API控制器...

    用Canvas+Javascript FileAPI 实现一个图片剪切、滤镜处理、上传下载工具.docx

    《使用Canvas+JavaScript FileAPI构建图像处理工具》 在现代Web开发中,用户对交互性和功能性的需求日益增强,这催生了对图像处理工具的需求。本文将详细介绍如何利用HTML5的Canvas元素和JavaScript的File API来...

    Asp.Net WebApi 上传文件方法(原生js上传和JQ ajax上传)

    这两种方法都可以与Asp.Net WebApi结合,实现用户友好的文件上传功能。 首先,我们要理解Asp.Net WebApi的核心概念。WebApi是一个用于构建HTTP服务的框架,它允许通过HTTP协议来传输数据,这非常适合RESTful API的...

    用.net实现图片上传功能

    在.NET框架中,实现图片上传功能是Web应用中常见的需求,尤其在社交媒体、电商网站或者内容管理系统中。本文将详细讲解如何使用.NET来构建图片上传的功能,并着重介绍`upload_click`函数在这个过程中的作用。 首先...

Global site tag (gtag.js) - Google Analytics