php - 在 Laravel 5 和 AJAX 上传块
问题描述
我尝试了几种方法来进行分块上传,但无论如何都没有与我一起工作,我仍然尝试但没有任何好处,任何帮助,我想使用这个包:
使用 jQuery 和分块上传通过 AJAX 上传文件,这就是我尝试过的:
<script type="text/javascript" src="{{ asset('js/jquery.iframe-transport.js') }}"></script>
<script type="text/javascript" src="{{ asset('js/jquery.fileupload.js') }}"></script>
<script type="text/javascript" src="{{ asset('js/jquery.ui.widget.js') }}"></script>
<div class="text-center">
<input id="fileupload" type="file" name="file" data-url="{{ url('upload') }}" style="display: inline;">
<ul id="file-upload-list" class="list-unstyled">
</ul>
</div>
<script type="text/javascript">
var $ = window.$; // use the global jQuery instance
var $uploadList = $("#file-upload-list");
var $fileUpload = $('#fileupload');
if ($uploadList.length > 0 && $fileUpload.length > 0) {
var idSequence = 0;
// A quick way setup - url is taken from the html tag
$fileUpload.fileupload({
maxChunkSize: 1000000,
method: "POST",
// Not supported
sequentialUploads: false,
formData: function (form) {
// Append token to the request - required for web routes
return [{name: '_token', value: $('input[name=_token]').val()}];
},
progressall: function (e, data) {
var progress = parseInt(data.loaded / data.total * 100, 10);
$("#" + data.theId).text('Uploading ' + progress + '%');
},
add: function (e, data) {
data._progress.theId = 'id_' + idSequence;
idSequence++;
$uploadList.append($('<li id="' + data.theId + '"></li>').text('Uploading'));
data.submit();
},
done: function (e, data) {
console.log(data, e);
$uploadList.append($('<li></li>').text('Uploaded: ' + data.result.path + ' ' + data.result.name));
}
});
}
</script>
我的控制器:
public function upload(Request $request) {
// create the file receiver
$receiver = new FileReceiver("file", $request, HandlerFactory::classFromRequest($request));
// check if the upload is success, throw exception or return response you need
if ($receiver->isUploaded() === false) {
throw new UploadMissingFileException();
}
// receive the file
$save = $receiver->receive();
// check if the upload has finished (in chunk mode it will send smaller files)
if ($save->isFinished()) {
// save the file and return any response you need, current example uses `move` function. If you are
// not using move, you need to manually delete the file by unlink($save->getFile()->getPathname())
return $this->saveFile($save->getFile());
}
// we are in chunk mode, lets send the current progress
/** @var AbstractHandler $handler */
$handler = $save->handler();
return response()->json([
"done" => $handler->getPercentageDone(),
'status' => true
]);
}
有什么成功的方法吗?
解决方案
推荐阅读
- google-bigquery - 如何将一个表中的列与 BigQuery 中另一个表中的数组进行比较?
- vbscript - MsgBox 显示旧图标。我该如何解决?
- javascript - fullcalendar v5 - event.setProp() 用于多个选项
- c++ - 带有截止日期的 gRPC UDP
- javascript - 缓冲区和流 - 它们是如何相关的?
- identityserver4 - 为什么我的 launchSettings.json 设置被忽略?
- c# - Xamarin - 在 CollectionView 中的另一个 ObservableCollection 中绑定 ObservableCollection 时遇到问题
- firebase - 如何从 Firestore 解析嵌套对象?
- android - 如何创建文件夹(Android R - Api 30)?
- asp.net-core - 在为托管的 Blazor WebAssembly 应用提供服务之前,如何使用 Azure AD B2C 对服务器上的用户进行身份验证?