php使用进度条上传文件(代码片段)

author author     2022-12-09     185

关键词:

<form name="upload" class="text-left">
	<div class="form-group">
		<label for="inputBoardCount">Количество плат в&nbsp;заказе<span class="text-primary">*</span></label>
		<input type="number" class="form-control" id="inputBoardCount" placeholder="Введите количество" min="1">
	</div>
	<div class="form-group">
		<label>Прикрепите файлы проекта<span class="text-primary">*</span></label>
		<div class="file-upload"><label><input type="file" multiple="multiple" class="form-control-file" id="inputFile"><span class="file-name btn btn-secondary"><span class="icon icon-cloud"></span> Добавить файлы</span></label></div>
		<div class="file-upload-progress" style="display:none">
			<div class="progress">
				<div class="progress-bar bg-success" role="progressbar" style="width: 0%" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100"></div>
			</div>
			<div class="mt-2">загружено <span class="loaded"></span class="loaded"> мб из <span class="total"></span> мб</div>
		</div>
		<div class="ajax-reply" hidden></div>
		<div class="success-msg" style="display:none;color:#009900;">Файл успешно загружен</div>
	</div>
	<div class="form-group">
		<div class="error-msg text-primary" style="display:none;"></div>
		<button type="button" class="btn btn-lg btn-primary w-100 js-send-order" data-toggle="modal" data-target="#quickOrderModal"><span class="icon icon-magnifer"></span> Получить бесплатную <br>оценку проекта</button>
	</div>
</form>
jQuery(document).ready(function($)

  // ссылка на файл AJAX  обработчик
  var ajaxurl = '/wp-admin/admin-ajax.php';
  // var nonce   = '<?= wp_create_nonce('uplfile') ?>';

  var files; // переменная. будет содержать данные файлов

  // заполняем переменную данными, при изменении значения поля file
  $('input[type=file]').on('change', function()
    files = this.files;

    $('.file-upload').hide();
    $('.file-upload-progress').fadeIn();
    $('.error-msg').slideUp();

    event.stopPropagation(); // остановка всех текущих JS событий
    event.preventDefault();  // остановка дефолтного события для текущего элемента - клик для <a> тега

    // ничего не делаем если files пустой
    if( typeof files == 'undefined' ) return;

    // создадим данные файлов в подходящем для отправки формате
    var data = new FormData();
    $.each( files, function( key, value )
      data.append( key, value );
    );

    // добавим переменную идентификатор запроса
    data.append( 'action', 'ajax_fileload' );
    // data.append( 'nonce', nonce );
    // data.append( 'post_id', '5' );

    var $reply = $('.ajax-reply');

    function setProgress(e) 
      if (e.lengthComputable) 
          var complete = e.loaded / e.total;
          let pr = Math.floor(complete*100)+"%";
          $('.progress-bar').css('width', pr);
          $('.loaded').text(Math.floor(e.loaded/1000000));
          $('.total').text(Math.floor(e.total/1000000));
      
    

    // AJAX запрос
    // $reply.text( 'Загружаю...' );
    $.ajax(
      xhr: function() 
        var xhr = new window.XMLHttpRequest();
        xhr.upload.addEventListener("progress", setProgress, false);
        xhr.addEventListener("progress", setProgress, false);
        return xhr;
      ,
      url         : ajaxurl,
      type        : 'POST',
      data        : data,
      cache       : false,
      dataType    : 'json',
      // отключаем обработку передаваемых данных, пусть передаются как есть
      processData : false,
      // отключаем установку заголовка типа запроса. Так jQuery скажет серверу что это строковой запрос
      contentType : false,
      // функция успешного ответа сервера
      success     : function( respond, status, jqXHR )
        // ОК
        if( respond.success )
          $.each( respond.data, function( key, val )
            $reply.append( '<p>'+ val +'</p>' );
            $('.file-upload-progress').hide();
            $('.file-upload').fadeIn();
            $('.success-msg').slideDown();
           );
        
        // error
        else 
          $reply.text( 'ОШИБКА: ' + respond.error );
        
      ,
      // функция ошибки ответа сервера
      error: function( jqXHR, status, errorThrown )
        $reply.text( 'ОШИБКА AJAX запроса: ' + status );
      

    );

  );

)

$('.js-send-order').click(function(e) 
  e.preventDefault();
  var files = $('.ajax-reply').html();
  var boardCount = $('#inputBoardCount').val();
  if(files == '') 
    e.stopPropagation();
    $('.error-msg').text('Прикрепите файлы проекта');
    $('.error-msg').slideDown();
    return;
  
  if( boardCount == '' ) 
    e.stopPropagation();
    $('.error-msg').text('Введите количество плат в заказе');
    $('.error-msg').slideDown();
    return;
  
  $('.error-msg').slideUp();
  $('input[name="your-files"]').val(files);
  $('input[name="order-amount"]').val(boardCount);
  // $(this).blur();
);
add_action( 'wp_ajax_'.'ajax_fileload',        'ajax_file_upload_callback' );
add_action( 'wp_ajax_nopriv_'.'ajax_fileload', 'ajax_file_upload_callback' );

// обработчик AJAX запроса
function ajax_file_upload_callback()
	// check_ajax_referer( 'uplfile', 'nonce' ); // защита

	if( empty($_FILES) )
		wp_send_json_error( 'Файлов нет...' );

	$post_id = (int) $_POST['post_id'];

	// ограничим размер загружаемой картинки
	$sizedata = getimagesize( $_FILES['upfile']['tmp_name'] );
	$max_size = 5000;
	if( $sizedata[0]/*width*/ > $max_size || $sizedata[1]/*height*/ > $max_size )
		wp_send_json_error( __('Картинка не может быть больше чем '. $max_size .'px в ширину или высоту...','km') );

	// обрабатываем загрузку файла
	require_once ABSPATH . 'wp-admin/includes/image.php';
	require_once ABSPATH . 'wp-admin/includes/file.php';
	require_once ABSPATH . 'wp-admin/includes/media.php';

	// фильтр допустимых типов файлов - разрешим только картинки
	add_filter( 'upload_mimes', function( $mimes )
		return [
			'jpg|jpeg|jpe' => 'image/jpeg',
			'gif'          => 'image/gif',
			'png'          => 'image/png',
		];
	 );

	$uploaded_imgs = array();

	foreach( $_FILES as $file_id => $data )
		$attach_id = media_handle_upload( $file_id, $post_id );

		// ошибка
		if( is_wp_error( $attach_id ) )
			$uploaded_imgs[] = 'Ошибка загрузки файла `'. $data['name'] .'`: '. $attach_id->get_error_message();
		else
			$uploaded_imgs[] = wp_get_attachment_url( $attach_id );
	

	wp_send_json_success( $uploaded_imgs );

php使用进度条下载php/curl文件(代码片段)

查看详情

htmljs通过进度条上传文件(代码片段)

查看详情

我需要知道已经上传了多少字节来更新进度条android(代码片段)

...频了。我需要在上传文件时显示进度条。我有下一个代码使用AsyncTask和HTTP4.1.1库来模拟FORM。classuploadVideoextendsAsyncTask<Void,Void,String>@OverrideprotectedStringdoInBackground(Voi 查看详情

[layui]上传文件带进度条+表单提交功能优化(代码片段)

上传文件带进度条+表单提交功能优化前期做了一个简视频提交;每次只提交一个需要重新上传。视频文件较大时候没有进度提示,用户体验并不好,今天做一个简单的优化!如果监听提交表单时候,回调路径可能还未完成。提... 查看详情

jquery上传文件显示进度条(代码片段)

<!DOCTYPEhtml><html><head><metacharset="UTF-8"><scriptsrc="../js/jquery.js"></script></head><body><h2>HTML5异步上传文件,带进度条(jQuery)</h2><formm 查看详情

layui文件上传进度条(模拟)(代码片段)

1.修改上传组件js(没测)https://blog.csdn.net/weixin_42457316/article/details/81017471https://www.cnblogs.com/youmingkuang/p/9183528.htmlhttps://fly.layui.com/jie/19430/ 1、upload.js扩展功能利用ajax的xhr属性实现该功能修改过 查看详情

使用 jQuery 的文件上传进度条

】使用jQuery的文件上传进度条【英文标题】:FileuploadprogressbarwithjQuery【发布时间】:2013-03-0220:39:19【问题描述】:我正在尝试在我的项目中实现AJAX文件上传功能。我为此使用jQuery;我的代码使用AJAX提交数据。我还想实现一个文... 查看详情

使用 jQuery 的文件上传进度条

】使用jQuery的文件上传进度条【英文标题】:FileuploadprogressbarwithjQuery【发布时间】:2013-03-0220:39:19【问题描述】:我正在尝试在我的项目中实现AJAX文件上传功能。我为此使用jQuery;我的代码使用AJAX提交数据。我还想实现一个文... 查看详情

jquery文件上传进度条不准确

...curate【发布时间】:2014-04-3020:45:07【问题描述】:我正在使用jquery文件上传(http://blueimp.github.io/jQuery-File-Upload/)插件。我的代码:$(\'#fileupload\').fileupload(url:\'server/index.php\',dat 查看详情

异步上传文件(jquery.form)+进度条+上传到ftp服务器(代码片段)

最近写了一个小项目需要上传文件显示进度条到ftp,总结一下分享我用的是jQuery.form.js上传ftp服务器,自己百度去搭建很简单的Talkischeap.Showmeyourcode.    GitHub上面的源码:https://github.com/Vinkong/learngitaspx页面<%@PageLan... 查看详情

文件上传和进度条

...在上传文件时根据读取的文件数量显示进度条。我们如何使用JS和Servlet来实现这一点我知道上传我可以使用apachecommonslib,但如何根据读取的数据显示进度条。我是否应该根据读取的数据量向JS代码发送计数响应,如果可以,如何... 查看详情

文件上传进度条[重复]

...荐一个【问题讨论】:我经常想知道这一点。我之前一直使用Flash解决方案,例如Uploadify。我尝试过使 查看详情

利用formdata对象+xhr新特性实现文件上传——带进度条(代码片段)

小编今天又get到一个新技能,就是上传图片并显示进度条,话不多说,直接进入正题!冲冲冲!!💪实现效果:当点击上传文件按钮后,如果未选择文件,会跳出请选择要上传的文件提示框... 查看详情

vueelement-ui,上传文件加载进度条显示效果(使用定时器实现源码分享)(代码片段)

上传文件效果如图:父组件相关代码html<drag-uploadref=‘mychild‘action="//接口相关地址"v-model="versionwareList"@submitUploadParent=‘formSubmit‘@input=‘delUpload‘:autoUpload="autoUpload":visible="visible":disabled="disabled"/>jshandleSubmit()this.$refs.form.valid... 查看详情

使用 PHP 5.4 中的 session 和 codeigniter 上传进度条

】使用PHP5.4中的session和codeigniter上传进度条【英文标题】:UploadprogressbarusingsessioninPHP5.4withcodeigniter【发布时间】:2015-06-2523:18:51【问题描述】:参考本教程。Trackinguploadprogresswithphp。我想让它在Codeigniter中工作。我没有开始让它... 查看详情

上传多个文件时上传进度(代码片段)

我想上传多个文件(超过1000个文件,总数超过2GB)。在PHP中,我使用函数if(move_uploaded_file($_FILES['files']['tmp_name'][$i],$original_file))$stamp='../contents/wm_watermark.png';$this->create_watermark_photo($original_file,$st 查看详情

记录小文件上传的几个例子(含进度条效果,附源码下载)(代码片段)

1、简单原生上传无javascript脚本、无进度条;借助iframe实现post提交后的无刷新效果;jquery插件ajaxFileUpload.js的实现原型。Html代码<formenctype="multipart/form-data"action="UploadFile_1"method="post"target="frameResult"><divclass="ite 查看详情

如何使用 Apache HttpClient 4 获取文件上传的进度条?

】如何使用ApacheHttpClient4获取文件上传的进度条?【英文标题】:HowtogetaprogressbarforafileuploadwithApacheHttpClient4?【发布时间】:2011-10-2619:20:52【问题描述】:我有以下代码用于使用Apache的HTTP客户端(org.apache.http.client)上传文件:publics... 查看详情