在发送到S3之前等待文件上传?

时间:2014-01-21 01:35:29

标签: file-upload amazon-s3 laravel laravel-3 appfog

我在Appfog上使用Laravel上传大文件时遇到问题,上传到Amazon S3。

对于1kb到1.5Mb之间的文件,它工作得很好。 但任何更大的,它都会失败。

出现这种情况的原因是,服务器显然是在实际上传文件并在服务器上的内存之前触发S3上传代码。

因为错误消息是S3 Laravel Bundle返回的未处理异常...

话说....

   S3::inputFile(): Unable to open input file: 

当我通过wamp使用相同的文件在本地上传/运行此功能时,它可以正常工作。并完美地进入S3。

只有当文件越过我的appfog应用程序时,它才会中断。因为本地上传需要20毫秒,而通过网络上传大约需要4秒。

这告诉我,它显然在文件到达之前触发了代码或者沿着那些行发布了代码。

而且,当文件很小时,它完全可以通过我的应用程序完成。只有当它们稍微大一点时才会中断。

任何想法???

public function action_uploadfile(){
    $input = Input::all();

    if(!empty($input['theDoc']['name'])){

        $file = Input::file('theDoc');
        $s = Setting::shortcode();
        $id = $input['theID']."-".$input['leadID'];
        $path_parts = pathinfo($file['name']);
        $ext = $path_parts['extension'];

            if(!empty($input['theName'])){
                $filename = $input['theName'].".".$ext;
            } else {
                $filename = $file['name'];
            }

            if((!empty($file))&&(S3::inputFile($file['tmp_name'], false))){

                if(S3::putObject($input2, 'myAMAZONBucket', $s."/".$id."/".$filename, S3::ACL_PUBLIC_READ)){
                $file2 = Doc::where('uri','=', $s."/".$id."/".$filename)->get();
                if($file2){
                  // duplicate file/document error goes here
                } else {
                    $f = New Doc;
                    $f->lead_id = $input['leadID'];
                    $f->sale_id = $input['theID'];
                    $f->user_id = Auth::user()->id;
                    $f->notes = $input['theNotes'];
                    $f->filetype = $ext;
                    $f->filesize = $file['size'];
                    $f->filename = $filename;
                    $f->uri = $s."/".$id."/".$filename;
                    if($f->save()){
                     return Redirect::back();
                    };
                }
            } else {
                 //Cannot read file error
            }

            } else {
                 //Failed upload error
            }

        } else {
           //No file selected error
        }
}

1 个答案:

答案 0 :(得分:0)

尝试使用一些ini_set()来播放max_execution_time和set_time_limit之类的内容,看看其中一个是否设置得太低。