我正在使用PHP,我正在使用S3 API上传文件,但我想确保在上传之前存储桶中不存在这个确切的文件名.
我在网上找到了一些使用"file_get_contents"的例子但是这不意味着你必须先下载整个文件吗?通常,这些文件大约是10 MB,所以理想情况下,我真的不想这样做.
有没有办法在不下载文件的情况下使用"file_get_contents"?
或者更好的是,也许我可以使用API请求来查看文件名是否存在?
对于我来说,内容或文件大小是否相同只是文件名并不重要.
我有一个如下所示的测试:
it('should fail to get deleted customer', function(done) {
request(app)
.get('/customers/'+newCustomerId)
.set('Authorization', 'Bearer ' + token)
.set('Accept', 'application/json')
.expect('Content-Type', /json/)
.expect(404, done)
});
Run Code Online (Sandbox Code Playgroud)
我已阅读此处的文档:
https://github.com/visionmedia/supertest
它是这么说的:
请注意如何将 did 直接传递给任何 .expect() 调用
不起作用的代码行是.expect(404, done)如果我将其更改为.expect(200, done)那么测试不会失败。
但是,如果我添加这样的结尾:
it('should fail to get deleted customer', function(done) {
request(app)
.get('/customers/'+newCustomerId)
.set('Authorization', 'Bearer ' + token)
.set('Accept', 'application/json')
.expect('Content-Type', /json/)
.expect(200)
.end(function(err, res) {
if (err) console.log(err);
done();
});
});
Run Code Online (Sandbox Code Playgroud)
然后测试失败。为什么.expect(200, done)也不失败呢?
我有一些代码可以将视频文件上传到YouTube:
$yt = new Zend_Gdata_YouTube($httpClient);
// create a new VideoEntry object
$myVideoEntry = new Zend_Gdata_YouTube_VideoEntry();
// create a new Zend_Gdata_App_MediaFileSource object
$filesource = $yt->newMediaFileSource('file.mov');
$filesource->setContentType('video/quicktime');
// set slug header
$filesource->setSlug('file.mov');
Run Code Online (Sandbox Code Playgroud)
我在S3中有视频,我想将它们上传到YouTube.我们S3帐户中的视频是公开的,因此我可以使用像wget这样的命令.在运行此脚本(shell_exec("wget ".$s3videoURL))之前,我应该运行一个命令来获取视频文件并将其下载到本地吗?
或者我应该尝试输入MediaFileSource作为S3文件本身的URL?
主要是,我只需要稳定性(不是经常超时的解决方案); 速度和本地存储并不重要(我可以在上传视频文件后在本地删除).
最好的方法是什么?
谢谢!
更新:我应该提一下,这个剧本将在每次执行时将大约5个视频上传到YouTube.
我有一个看起来像这样的对象:
stdClass Object
(
[page] => stdClass Object
(
[1] => stdClass Object
(
[element] => stdClass Object
(
[background_color] => stdClass Object
...
Run Code Online (Sandbox Code Playgroud)
当我打印时print_r($arr->page):
stdClass Object
(
[1] => stdClass Object
(
[element] => stdClass Object
(
[background_color] => stdClass Object
(
Run Code Online (Sandbox Code Playgroud)
但这没有任何印刷品:
print_r($arr->page->{"1"});
Run Code Online (Sandbox Code Playgroud)
这会输出错误:
print_r($arr->page->1);
Run Code Online (Sandbox Code Playgroud)
解析错误:语法错误,意外T_LNUMBER,期待T_STRING或T_VARIABLE或'{'或'$'i
如何访问"1"元素?
更新:
我也试着$arr->page[1]和$arr->page["1"],但得到这个错误:
致命错误:不能使用stdClass类型的对象作为数组
更新2:
var_dump($arr->page);
Run Code Online (Sandbox Code Playgroud)
打印这个:
object(stdClass)#3 (1) { [1]=>
object(stdClass)#4 (1) {
["element"]=>
object(stdClass)#5 (20) {
["background_color"]=>
object(stdClass)#6 (7) {
Run Code Online (Sandbox Code Playgroud) 我有一些看起来像的测试文档
"hits": {
...
"_source": {
"student": "DTWjkg",
"name": "My Name",
"grade": "A"
...
"student": "ggddee",
"name": "My Name2",
"grade": "B"
...
"student": "ggddee",
"name": "My Name3",
"grade": "A"
Run Code Online (Sandbox Code Playgroud)
我想得到成绩为 B 的学生的百分比,结果是“33%”,假设只有 3 个学生。
我将如何在 Elasticsearch 中做到这一点?
到目前为止,我有这个聚合,我觉得很接近:
"aggs": {
"gradeBPercent": {
"terms": {
"field" : "grade",
"script" : "_value == 'B'"
}
}
}
Run Code Online (Sandbox Code Playgroud)
这将返回:
"aggregations": {
"gradeBPercent": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "false",
"doc_count": 2
},
{
"key": "true",
"doc_count": 1
}
]
} …Run Code Online (Sandbox Code Playgroud) 我是C的新手,我正在研究其他人的代码,我正试图摆脱一个看起来像这样的警告:
warning: function expects to return value: myfunc
Run Code Online (Sandbox Code Playgroud)
myfunc是这样声明的,(我相信它默认为int)
myfunc(int id, int age) {
...
return;
}
Run Code Online (Sandbox Code Playgroud)
所以我尝试在myfunc后面放置void,使它看起来像这样
void myfunc(int num, int age) {
Run Code Online (Sandbox Code Playgroud)
我收到一个错误:
标识符已重新声明:myfunc
Run Code Online (Sandbox Code Playgroud)current : function() returning void previous: function() returning int : "students.c", line 233
但是当我去student.c的第233行时,这只是我实际上称之为函数的第一个地方.为什么会这样?
我知道我可以更改return为return 0;然后将myfunc定义为int.但是当调用这个函数时,它没有分配给任何东西,它只是执行myfunc(current_id, age);(int i = myfunc(...例如).
在这种情况下,最好不要使用void吗?可以return;在void函数中使用吗?
谢谢!