我正在尝试从dropzone中的存储文件夹中预加载图像。这就是我所拥有的:
AJAX
$.ajax({
url: "suspect_images",
data: { id: $('input[name=b_id]').val(), _token: $('input[name=_token]').val()},
dataType: 'json',
type: 'GET',
success: function (data) {
$.each(data.images, function (key, value) {
var file = {name: value.original, size: value.size};
dropZone.options.addedfile.call(dropZone, file);
dropZone.options.thumbnail.call(dropZone, file, value.path + value.server);
dropZone.emit("complete", file);
dropZone.files.push(file);
});
},
error: function (data) {
}
}, "json")
控制器
$images = Mugshots::select("AccusedID", "FileName", "OriginalFileName")->where("AccusedID", "=", $request->input('id'))->get();
$imageAnswer = [];
foreach ($images as $image) {
$imageAnswer[] = [
'original' => $image->OriginalFileName,
'server' => $image->FileName,
'size' => File::size(storage_path() . '/uploads/images/suspects/' . $request->input('id') . '/full_size/' . $image->FileName),
'path' => storage_path() . '/uploads/images/suspects/' . $request->input('id') . '/full_size/'
];
}
return response()->json([
'images' => $imageAnswer
]);
返回
Not allowed to load local resource: file:///C:/xampp/htdocs/IMS/storage/uploads/images/suspects/2/full_size/file.jpg
现在,如果我的图片位于公共文件夹中,这可能会有效。但出于安全考虑,我必须将其存储在存储文件夹中。我可以在粘贴网址时通过浏览器访问该文件,但不能在javascript中访问。我认为这可能是因为权限。如何从存储文件夹加载文件并将其显示在dropzone上?
我要求将其加载到dropzone而不是图片代码。
答案 0 :(得分:0)
不允许浏览器从硬盘驱动器加载文件。如果你不想把你的文件放在公共文件夹中这里有一个选项。
$path = storage_path('path/to/your/file.extension');
$data = file_get_contents($path);
$type = pathinfo($path, PATHINFO_EXTENSION);
$base64 = base64_encode($data);
$src = 'data:image/' . $type . ';base64,' . $base64;
return "<img src={$src} />";
我们的想法是获取您文件的内容并编码为base64然后您可以回复您的观点,Laravel可能会为此类流程提供API。
答案 1 :(得分:0)
我认为你可以调用或设置一个{symbolic link}来引导你的{image file}到你的[storage]目录。 参考:http://php.net/manual/en/function.symlink.php
例如:
$sUploadImage = $image->getFilename();
$sStoragePath = storage_path() . '/uploads/images/suspects/' . $request->input('id') . '/full_size/';
$sPublicPath = public_path(). '/uploads/images/suspects/' . $request->input('id') . '/full_size/';
if (is_dir($sPublicPath) !== true) {
mkdir($sPublicPath, 0755, true); // This would create a new directory (e.g 'public/uploads/images/suspects/{id}/full_size/')
}
// If there's no symlink exists (e.g 'public/uploads/images/suspects/{id}/full_size/{filename.png}', create a new one
if (is_link($sPublicPath . '/' . $sUploadImage) !== true) {
symlink($sStoragePath . '/' . $sUploadImage, $sPublicPath . '/' . $sUploadImage);
}
通过这种方式,您有一个快捷方式链接&#39;这将把[storage]目录中的图像引用到[public]目录。
然后替换{$ imageAnswer}数组中的{size}和{path}键。
'size' => File::size($sPublicPath . '/' . $sUploadImage),
'path' => $sPublicPath . '/' . $sUploadImage
然后你现在可以在dropzone中使用那些{images},就像@hassan在评论中提到的那样。
希望这有助于您的情况。