我正在尝试创建一个网站来上传Laravel中的文件,但是我不能:(,如果我使用不带框架的PHP,一切正常,但是有了它(Laravel),我会收到错误消息,那是问题。
这是我的代码:
<form id="remote_upload" method="POST">
@csrf
<input name="url" id="url" type="url" />
<input name="upload" id="upload" type="submit" />
</form>
我的AJAX代码:
$(document).ready(function(){
$('#remote_upload').on('submit', function(event){
event.preventDefault();
$.ajax({
url: "{{ route('remote_upload') }}",
method:"POST",
data: new FormData(this),
// IF WE HAVE ANY FUNCTION TO SET UPLOAD PROGRESS FOR REMOTE UPLOAD - PLEASE TELL ME :)
xhr: function() {
var myXhr = $.ajaxSettings.xhr();
if(myXhr.upload){
myXhr.upload.addEventListener('progress', progressHandlerHome, false);
myXhr.addEventListener("load", completeHandlerHome, false);
myXhr.addEventListener("error", errorHandlerHome, false);
myXhr.addEventListener("abort", abortHandlerHome, false);
}
return myXhr;
},
dataType:'JSON',
contentType: false,
cache: false,
processData: false,
// IF SUCCESS
success:function(data)
{
$('.result').html(data.link);
}
});
});
});
这是我的控制器:
protected function remote_upload(Request $request) {
$file = file_get_contents($request->url_file);
// UPLOAD FILE
if (getValue('storage_type', 'disk') == 's3') {
$path = Storage::disk('s3')->putFile('files', $file);
$storage = 's3';
} else {
$path = Storage::putFile('files', $file);
$storage = 'disk';
}
return response()->json([
'link' => $path
]);
}
我不知道我们是否有一个软件包可以从Laravel中的URL上传文件:)
注意:关于上传验证(检查URL,是否具有SSL ...),我会这样做,但是希望您能看到我,如何添加上传进度,实际大小文件的名称及其原始名称仅通过URL,在上传之前:)
谢谢
答案 0 :(得分:1)
假设您从ajax FormData对象中获取了正确的数据,则只需执行以下操作:
public function store(Request $request)
{
$imgLocation = Storage::disk('public')->put("imagename", $request->file('image'));
...
}
这会将图像本地保存到您的laravel项目中,您可能需要为Amazon s3编辑它,但应该类似。
如果您想通过网址上传图片,可以尝试执行以下操作:
public function store(Request $request) {
$url = $request->image;
$contents = file_get_contents($url);
$name = substr($url, strrpos($url, '/') + 1);
Storage::disk('s3')->putFile($name, $contents);
...
}
答案 1 :(得分:0)
您只需像这样使用 Storage
:
protected function remote_upload(Request $request) {
$file = $request->url_file;
// UPLOAD FILE
if (getValue('storage_type', 'disk') == 's3') {
$path = Storage::disk('s3')->putFile('files', $file);
$storage = 's3';
} else {
$path = Storage::putFile('files', $file);
$storage = 'disk';
}
return response()->json([
'link' => $path
]);
}