我正在使用Laravel 5.2(用于后端)和AngularJS用于font-end构建一个REST-full网络应用程序。我通过使用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请求提供的文件。
我已尝试过的一些事情:
使用File :: delete()而不是Storage :: delete() 使用unlink()代替Laravel Facades; 使用HTTP DELETE请求将imageToDelete作为数据发送(因此不在URL中)。 但都没有成功。
如何让Laravel(PHP)删除图像?
感谢您的帮助!
答案 0 :(得分:0)
你可以尝试
$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']);
}
答案 1 :(得分:0)
您可能需要检查图像路径。当您使用laravel存储或文件facde时,您的文件路径应该是绝对路径,例如public_path($imageToDelete)