GVKun编程网logo

基于 laravel 框架编写,项目上线之后涉及文件上传时可能会遭遇上传失败的问题

29

关于基于laravel框架编写,项目上线之后涉及文件上传时可能会遭遇上传失败的问题的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于ajax+Laravel多文件上传、gitlab使用过程中

关于基于 laravel 框架编写,项目上线之后涉及文件上传时可能会遭遇上传失败的问题的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于ajax + Laravel 多文件上传、gitlab 使用过程中遇到大文件上传或下载失败的问题、javascript – 如何在小块中上传带有ajax的文件并检查失败,重新上传失败的部分.、java实现文件上传时遇到的问题等相关知识的信息别忘了在本站进行查找喔。

本文目录一览:

基于 laravel 框架编写,项目上线之后涉及文件上传时可能会遭遇上传失败的问题

基于 laravel 框架编写,项目上线之后涉及文件上传时可能会遭遇上传失败的问题

基于 laravel 框架编写,项目上线之后涉及文件上传时可能会遭遇此问题

项目上线后的报错情况如下:

Unable to guess the MIME type as no guessers are available (have you enabled the PHP_fileinfo extens

解决问题方法:

第一步.检查是否安装fileinfo(我这里用的是宝塔)

第二步:开启fileinfo扩展

PHP.ini中,将extension=fileinfo前面的分号去掉

完美解决!

 

ajax + Laravel 多文件上传

ajax + Laravel 多文件上传

说明

前端使用了 jQuery.form.js 实现 Ajax 表单提交,后端使用的是著名的 Laravel(5.4)进行接收、存储,支持一次选择多个文件,选择确定后立即上传,并显示上传后的链接。

gif video

这里写图片描述

路由

C:\L\2017.11.15 MAMP\root\tagMoon\routes\web.php
Route::post(''/multiUploadImg'',''UploadCtrl@multiUploadImg'');
Route::get(''/upload'', function(){
   return view(''upload.main'');
});

前端

C:\L\2017.11.15 MAMP\root\tagMoon\resources\views\upload\main.blade.php

截屏

before :

这里写图片描述

(权简风格 :)

after :

这里写图片描述

html

    <form id="form_uploadImg" method="post" enctype="multipart/form-data">
        <div class="file-field">
            <div class="btn btn-primary btn-sm">
                <span>Choose files</span>
                <input name="filesToUpload[]" id="input_multifileSelect" type="file" multiple>
            </div>
        </div>
    </form>
    <br><br><br>
    <div id="div_uploadedImgs"></div>

!!! 注意下面这一句,必须要有一对方括号:[]

<input name="filesToUpload[]"

js

        $(document).ready(function() {
            $(''#input_multifileSelect'').on(''change'', function(){
                var ajax_option= {
                    url: "multiUploadImg", 
                    // type : ''post'', 默认是 form action
                    success: function ( data ) {
                        console.log( data );
                        showUploadedImgs( data.uploadedFiles );
                    }
                }
                $(''#form_uploadImg'').ajaxSubmit( ajax_option );
            });
        });
        // 显示上传的图片
        function showUploadedImgs( imgs ){
            $.each( imgs, function(index, img ) {
                var pic = ''<p><img src="{0}"  alt="" /><br>{0} ( {1} - {2} )</p>'';
                pic = pic.format( baseUrl + ''public/'' + img.savedFile, img.name, img.size );
                $(''#div_uploadedImgs'').prepend( pic );
            });
        }
        // 为 String 类增加 format 函数
        String.prototype.format = function() {
            var str = this;
            for (var i = 0; i < arguments.length; i++) {
                var reg = new RegExp("\\{" + i + "\\}", "gm");
                str = str.replace(reg, arguments[i]);
            }
            return str;
        }

控制器(Controller)

C:\L\2017.11.15 MAMP\root\tagMoon\app\Http\Controllers\UploadCtrl.php
    /**
     * 接收上传文件
     * @param Request $request
     * @return array
     */
    public function multiUploadImg( Request $request ){
        
        // 重组数组,子函数
        function reArrayFiles( $file_post ) {
    
            $file_ary = array();
            $file_count = count($file_post[''name'']);
            $file_keys = array_keys($file_post);
    
            for ($i=0; $i<$file_count; $i++) {
                foreach ($file_keys as $key) {
                    $file_ary[$i][$key] = $file_post[$key][$i];
                }
            }
    
            return $file_ary;
        }

        $imgFiles = $_FILES[''filesToUpload'']; // 与前端页面中的 input name=“filesToUpload[]” 相对应
        $uploadedFiles = array(); // 返回值

        if(!empty($imgFiles))
        {
            $img_desc = reArrayFiles( $imgFiles );
            $destinationPath = ''storage/uploads/''; //public 文件夹下面建 storage/uploads 文件夹

            foreach( $img_desc as $img )
            {
                $savedFile = $destinationPath.date(''YmdHis'',time()).mt_rand().''.''.pathinfo( $img[''name''], PATHINFO_EXTENSION );
                move_uploaded_file($img[''tmp_name''],  $savedFile);
                $img[''savedFile''] = $savedFile ;
                array_push( $uploadedFiles, $img );
            }
        }

        $allowed_extensions = ["png", "jpg", "gif"];
        // TODO 判断文件类型

        return [''uploadedFiles'' => $uploadedFiles ];
    }

response

这里写图片描述

note

  • php : 7.1.5
  • Laravel : 5.4
  • jQuery : 3.3.1
  • Date : 2018.02.07

download

http://download.csdn.net/down...

gitlab 使用过程中遇到大文件上传或下载失败的问题

gitlab 使用过程中遇到大文件上传或下载失败的问题

环境如下:gitlab 服务器 redhat,客户端环境 mac os 如果 gitlab 上传代码提示: error: RPC failed; result=22, HTTP code = 411 该问题是由于客户端设置的 http_post_buffer 大小不足导致的,解决方法如下: 进入到工程所在的终端目录下执行: git config http.postBuffer 524288000

如果 gitlab 上传代码提示: error: RPC failed; result=22, HTTP code = 413 该问题是由于 gitlab 服务器端 client_max_body_size 参数过小大致的,解决方法如下: 进入到服务器的终端目录:/etc/nginx 下,编辑 nginx.conf,在 http 配置段中增加如下配置,大小自行调节

client_max_body_size 500m

如果 gitlab clone 代码提示: error: RPC failed; result=22, HTTP code = 502 该问题一般都是由于 gitlab 服务器端上的文件过大,导致客户端下载文件超时,gitlab 使用 unicorn 进行 webserver 管理,如果客户端下载文件超过 30s,unicorn 就会结束该线程,因此这里的解决方案就是设置 unicorn 的超时时间,方法如下: 进入到 gitlab 服务器的终端目录:/home/git/gitlab/config/ 下,编辑 unicorn.rb

# nuke workers after 30 seconds instead of 60 seconds (the default)
timeout 120

调整该项时间值,即可调整超时时间,具体设置自行调节

javascript – 如何在小块中上传带有ajax的文件并检查失败,重新上传失败的部分.

javascript – 如何在小块中上传带有ajax的文件并检查失败,重新上传失败的部分.

我有一个用户上传的文件,我想实现以下目标.

>将文件划分为大约一兆字节的较小块.
>上传每个块,并在开始上传下一个块之前等待它完成.
>为每个块获得成功或失败报告.
>重新上传失败的块.
>以百分比取得进展.

这是一些粗略的JavaScript.我真丢了.在线获得了一些代码并尝试修改它.

$.chunky = function(file, name){        
                var loaded = 0;
                var step = 1048576//1024*1024;
                var total = file.size;
                var start = 0;
                var reader = new FileReader();

                reader.onload = function(e){

                var d = {file:reader.result}
                $.ajax({
                    url:"../record/c/index.PHP",
                    type:"POST", 
                    data:d}).done(function(r){
                    $('.record_reply_g').html(r);

                    loaded += step;                 
                    $('.upload_rpogress').html((loaded/total) * 100);

                        if(loaded <= total){
                            blob = file.slice(loaded,loaded+step);
                            reader.readAsBinaryString(blob);
                        } else {
                            loaded = total;
                        }
                })              
                };

                var blob = file.slice(start,step);
                reader.readAsBinaryString(blob);
            }

我怎样才能实现上述目标.如果有可行的解决方案,请解释发生了什么.

解决方法:

你没有为任何块上传失败做任何事情.

$.chunky = function(file, name){        
    var loaded = 0;
    var step = 1048576//1024*1024; size of one chunk
    var total = file.size;  // total size of file
    var start = 0;          // starting position
    var reader = new FileReader();
    var blob = file.slice(start,step); //a single chunk in starting of step size
    reader.readAsBinaryString(blob);   // reading that chunk. when it read it, onl oad will be invoked

    reader.onload = function(e){            
        var d = {file:reader.result}
        $.ajax({
            url:"../record/c/index.PHP",
            type:"POST", 
            data:d                     // d is the chunk got by readAsBinaryString(...)
        }).done(function(r){           // if 'd' is uploaded successfully then ->
                $('.record_reply_g').html(r);   //updating status in html view

                loaded += step;                 //increasing loaded which is being used as start position for next chunk
                $('.upload_rpogress').html((loaded/total) * 100);

                if(loaded <= total){            // if file is not completely uploaded
                    blob = file.slice(loaded,loaded+step);  // getting next chunk
                    reader.readAsBinaryString(blob);        //reading it through file reader which will call onl oad again. So it will happen recursively until file is completely uploaded.
                } else {                       // if file is uploaded completely
                    loaded = total;            // just changed loaded which Could be used to show status.
                }
            })              
        };
}

编辑

要再次上传失败的块,您可以执行以下操作:

var totalFailures = 0;
reader.onload = function(e) {
    ....
}).done(function(r){
    totalFailures = 0;
    ....
}).fail(function(r){   // if upload Failed
   if((totalFailure++) < 3) { // atleast try 3 times to upload file even on failure
     reader.readAsBinaryString(blob);
   } else {                   // if file upload is Failed 4th time
      // show message to user that file uploading process is Failed
   }
});

java实现文件上传时遇到的问题

java实现文件上传时遇到的问题

最近使用java实现文件上传的时候,获取到的list为空,应该如何解决??代码如下

public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");

DiskFileItemFactory factory = new DiskFileItemFactory();
//获取绝对路径
String path  = request.getRealPath("/upload");
//
factory.setRepository(new File(path));
factory.setSizeThreshold(1024*1024);
//
ServletFileUpload upload = new ServletFileUpload(factory);
try {
List<FileItem> list = (List<FileItem>)upload.parseRequest(request);
System.out.println(list.size());
for (FileItem fileItem : list) {
System.out.println(fileItem.getFieldName());
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}

我们今天的关于基于 laravel 框架编写,项目上线之后涉及文件上传时可能会遭遇上传失败的问题的分享就到这里,谢谢您的阅读,如果想了解更多关于ajax + Laravel 多文件上传、gitlab 使用过程中遇到大文件上传或下载失败的问题、javascript – 如何在小块中上传带有ajax的文件并检查失败,重新上传失败的部分.、java实现文件上传时遇到的问题的相关信息,可以在本站进行搜索。

本文标签: