我正在使用Laravel 5.2(用于后端)和AngularJS作为字体端构建一个REST完整的web应用程序。我通过使用API连接到Laravel后端。现在我偶然发现了以下问题:我可以正确上传图像,但再次删除它是不起作用的。
文件被上传到Larvel public/images/uploaded/文件夹中。这是我的Angular Service(单击"删除"按钮时触发的http请求),其中变量imageToDelete是图像的相对路径。到目前为止还不错,请求正在启动,imageToDelete变量也已填充。
function deleteProfileImage(imageToDelete) {
return $http({
method: 'DELETE',
url: '/api/pictures/' + imageToDelete
})
.then(deleteProfileImageSuccess)
.catch(deleteProfileImageError);
function deleteProfileImageSuccess(response) {
$log.info('Deleting profile picture Success.');
console.log(response);
return response;
}
function deleteProfileImageError(error) {
$log.info('Deleting profile picture failed because: ' + error.data);
return error;
}
}
这个角度HTTP请求向我的Laravel控制器中的以下函数发出DELETE请求。
public function destroy($imageToDelete)
{
if(Storage::delete($imageToDelete)) {
return response()->json(['success' => 'success', 'message' => 'File Deleted']);
} else {
return response()->json(['error' => 'Deleting Image failed.'])
->setStatusCode(Response::HTTP_BAD_REQUEST);
}
}
在这里,Storage::delete($imageToDelete)不执行任何操作。它不会删除Angular delete请求提供的文件
我已经尝试过一些东西:
使用文件::delete()而不是存储::delete()使用unlink()操作Laravel Facades;使用HTTP DELETE请求将imageToDelete作为数据发送(因此不在URL中)。但都没有成功。
如何让Laravel(PHP)删除图像?
谢谢你的帮助!
您可以尝试
$storage = Storage::find($imageToDelete);
if($storage->delete()) {
return response()->json(['success' => 'success', 'message' => 'File Deleted']);
}
或
if(Storage::destroy($imageToDelete)) {
return response()->json(['success' => 'success', 'message' => 'File Deleted']);
}
或
$deleteImage = Storage::where('id', $imageToDelete)->delete();
if($deleteImage){
return response()->json(['success' => 'success', 'message' => 'File Deleted']);
}
您可能需要检查图像路径。当您使用laravel存储或文件facde时,您的文件路径应该是绝对路径,例如public_path($imageToDelete)