我正在寻找一个很好的解决方案来获取亚马逊s3的签名网址.
我有一个版本使用它,但没有使用laravel:
private function getUrl ()
{
$distribution = $_SERVER["AWS_CDN_URL"];
$cf = Amazon::getCFClient();
$url = $cf->getSignedUrl(array(
'url' => $distribution . self::AWS_PATH.rawurlencode($this->fileName),
'expires' => time() + (session_cache_expire() * 60)));
return $url;
}
Run Code Online (Sandbox Code Playgroud)
我不知道这是否是使用laravel的最佳方式,因为它有一个完整的文件系统可以工作......
但如果没有其他办法,我该如何获得客户?调试我在Filesystem对象中找到了它的一个实例,但它受到保护......
tldr:有没有办法在不上网的情况下发出内部请求(使用方法的路径)?
——
为什么我需要它?我有一个接收许多事件的项目。谁将处理每个事件的决定由控制器做出。所以我有类似的东西:
@RestController
@RequestMapping("/events")
public class EventHandlerAPI {
@Autowired
private EventAHandler eventAhandler;
@Autowired
private EventBHandler eventBhandler;
@PostMapping("/a")
public void handleEventA(@RequestBody EventA event) {
eventAhandler.handle(id, event);
}
@PostMapping("/b")
public void handleEventB(@RequestBody EventB event) {
eventBhandler.handle(id, event);
}
}
Run Code Online (Sandbox Code Playgroud)
我们最近添加了通过队列服务接收事件的支持。它向我们发送有效载荷和事件类。我们的决定是让两个接口都工作(休息和排队)。避免代码重复的解决方案是让控制器选择哪个处理程序来处理事件。现在的代码类似于:
@Configuration
public class EventHandlerQueueConsumer {
@Autowired
private EventHandlerAPI eventHandlerAPI;
private Map<Class, EventHandler> eventHandlers;
@PostConstruct
public void init() {
/* start listen queue */
declareEventHandlers();
}
private void declareEventHandlers() {
eventHandlers = new HashMap<>();
eventHandlers.put(EventAHandler.class, (EventHandler<EventAHandler>) eventHandlerAPI::handleEventA);
eventHandlers.put(EventBHandler.class, (EventHandler<EventBHandler>) eventHandlerAPI::handleEventB);
} …
Run Code Online (Sandbox Code Playgroud) 由于某些字符串末尾缺少char'\ 0',我的代码崩溃了.
我很清楚为什么我们必须使用这个终止字符.我的问题是,在字符数组中添加潜在的第二个空字符是否有问题 - 解决字符串问题?
我认为只需在每个字符串上添加一个"\ 0",而不是验证它是否需要然后添加就更便宜,但我不知道这是不是一件好事.