質問編集履歴
6
タイトル修正
title
CHANGED
@@ -1,1 +1,1 @@
|
|
1
|
-
|
1
|
+
Wordpress APIで画像を投稿したいが画像が壊れてしまう
|
body
CHANGED
@@ -95,4 +95,6 @@
|
|
95
95
|
何が原因でしょうか
|
96
96
|
何かHeaderやbodyで足らない情報あるんですかね...
|
97
97
|
開けない画像はブラウザやダウンロードでプレビューしても表示できませんが、Photoshopでは開けました。
|
98
|
-
https://1st-train.net/wp-content/uploads/2017/08/be8f1caaf1adcafaf22f912175162c170463a4ad_z-4.jpg
|
98
|
+
https://1st-train.net/wp-content/uploads/2017/08/be8f1caaf1adcafaf22f912175162c170463a4ad_z-4.jpg
|
99
|
+
|
100
|
+
どうやったら壊れないようにできるのでしょうか?
|
5
改善
title
CHANGED
File without changes
|
body
CHANGED
@@ -93,4 +93,6 @@
|
|
93
93
|
が、ファイルが246kbと適切な大きさはあるようですが、画像の表示に失敗します。
|
94
94
|

|
95
95
|
何が原因でしょうか
|
96
|
-
何かHeaderやbodyで足らない情報あるんですかね...
|
96
|
+
何かHeaderやbodyで足らない情報あるんですかね...
|
97
|
+
開けない画像はブラウザやダウンロードでプレビューしても表示できませんが、Photoshopでは開けました。
|
98
|
+
https://1st-train.net/wp-content/uploads/2017/08/be8f1caaf1adcafaf22f912175162c170463a4ad_z-4.jpg
|
4
追記
title
CHANGED
File without changes
|
body
CHANGED
@@ -92,4 +92,5 @@
|
|
92
92
|
としました。一応、ファイル自体のアップロードには成功しました。
|
93
93
|
が、ファイルが246kbと適切な大きさはあるようですが、画像の表示に失敗します。
|
94
94
|

|
95
|
-
何が原因でしょうか
|
95
|
+
何が原因でしょうか
|
96
|
+
何かHeaderやbodyで足らない情報あるんですかね...
|
3
\$bodyを変更
title
CHANGED
@@ -1,1 +1,1 @@
|
|
1
|
-
|
1
|
+
$bodWordpress APIで画像を投稿したい
|
body
CHANGED
@@ -81,11 +81,7 @@
|
|
81
81
|
'Content-Type'=> "image/jpeg"
|
82
82
|
//"content"=>"$nakami",
|
83
83
|
),
|
84
|
-
'body' =>
|
84
|
+
'body' => $body
|
85
|
-
"content"=>"$nakami",
|
86
|
-
// "link" => "/var/www/html/2nd/cake/app/webroot/files/xxx.jpg",
|
87
|
-
// "source_url" => "/var/www/html/2nd/cake/app/webroot/files/xxx.jpg"
|
88
|
-
)
|
89
85
|
));
|
90
86
|
$this->fullResponse = $result;
|
91
87
|
|
2
進捗報告
title
CHANGED
File without changes
|
body
CHANGED
@@ -30,7 +30,8 @@
|
|
30
30
|
でうまくいっているので、認証系がうまくいっていないわけではなく、画像の投げ方に問題があると睨んでいます。
|
31
31
|
|
32
32
|
|
33
|
-
ということで、回答頂いた内容を参考に少し改良したものを使って見ました。
|
33
|
+
ということで、回答頂いた内容を参考に少し改良したものを使って見ましたが、うまくいってなかったので、ライブラリも含めていじってみました。
|
34
|
+
|
34
35
|
```lang-php
|
35
36
|
$client = $this->createClient2();
|
36
37
|
$path="/var/www/html/webroot/files/xxx.jpg";
|
@@ -46,7 +47,7 @@
|
|
46
47
|
}
|
47
48
|
|
48
49
|
private function doPostMultipartFormData2($url, $authorization, $paths,$data) {
|
49
|
-
|
50
|
+
// App::uses('String', 'Utility');
|
50
51
|
debug("aiueo");
|
51
52
|
App::uses('CakeText', 'Utility');
|
52
53
|
//$boundary = String::uuid();
|
@@ -68,30 +69,31 @@
|
|
68
69
|
$body .= file_get_contents($path) . "\r\n";
|
69
70
|
$body .= "--{$boundary}--\r\n";
|
70
71
|
}
|
72
|
+
$nakami=file_get_contents($path);
|
71
73
|
|
72
|
-
|
73
74
|
$socket = new HttpSocket();
|
74
75
|
$result = $socket->request(array('method' => 'POST',
|
75
76
|
'uri' => $url,
|
76
77
|
'header' => array(
|
77
78
|
'Authorization' => $authorization,
|
79
|
+
'Content-Disposition'=> "attachment; filename=\"{$filename}\"\r\n",
|
78
|
-
'Content-Type' => "multipart/form-data; boundary={$boundary}"
|
80
|
+
//'Content-Type' => "multipart/form-data; boundary={$boundary}"
|
81
|
+
'Content-Type'=> "image/jpeg"
|
82
|
+
//"content"=>"$nakami",
|
83
|
+
),
|
79
|
-
'body' =>
|
84
|
+
'body' => array(
|
85
|
+
"content"=>"$nakami",
|
86
|
+
// "link" => "/var/www/html/2nd/cake/app/webroot/files/xxx.jpg",
|
87
|
+
// "source_url" => "/var/www/html/2nd/cake/app/webroot/files/xxx.jpg"
|
88
|
+
)
|
89
|
+
));
|
80
90
|
$this->fullResponse = $result;
|
81
91
|
|
82
92
|
return $result;
|
83
93
|
}
|
84
94
|
|
85
95
|
```
|
86
|
-
としましたが
|
87
|
-
```lang-php
|
88
|
-
array(
|
89
|
-
'code' => 'json_oauth1_signature_mismatch',
|
90
|
-
'message' => 'OAuth signature does not match',
|
91
|
-
'data' => array(
|
92
|
-
'status' => (int) 401
|
93
|
-
)
|
94
|
-
)
|
95
|
-
```
|
96
|
-
と帰ってきています。認証には問題がなくても、POSTするデータが誤っていると、
|
97
|
-
|
96
|
+
としました。一応、ファイル自体のアップロードには成功しました。
|
97
|
+
が、ファイルが246kbと適切な大きさはあるようですが、画像の表示に失敗します。
|
98
|
+

|
99
|
+
何が原因でしょうか
|
1
追記
title
CHANGED
File without changes
|
body
CHANGED
@@ -27,4 +27,71 @@
|
|
27
27
|
$catename=array("name"=>"$companyname");
|
28
28
|
$result = $client->post($oauth_token,$oauth_token_secret,'https://xxx.net/wp-json/wp/v2/categories',$catename);
|
29
29
|
```
|
30
|
-
でうまくいっているので、認証系がうまくいっていないわけではなく、画像の投げ方に問題があると睨んでいます。
|
30
|
+
でうまくいっているので、認証系がうまくいっていないわけではなく、画像の投げ方に問題があると睨んでいます。
|
31
|
+
|
32
|
+
|
33
|
+
ということで、回答頂いた内容を参考に少し改良したものを使って見ました。
|
34
|
+
```lang-php
|
35
|
+
$client = $this->createClient2();
|
36
|
+
$path="/var/www/html/webroot/files/xxx.jpg";
|
37
|
+
$multimedia=array('file'=>$path);
|
38
|
+
$result$client->postMultipartFormData2($oauth_token,$oauth_token_secret,'https://xxx.net/wp-json/wp/v2/media',array('contents[]' =>$path),array("title" => "Titre media","description" => "description media"));
|
39
|
+
|
40
|
+
public function postMultipartFormData2($accessTokenKey, $accessTokenSecret, $url, array $paths, array $postData = array()) {
|
41
|
+
$accessToken = new OAuthToken($accessTokenKey, $accessTokenSecret);
|
42
|
+
$request = $this->createRequest('POST', $url, $accessToken, array());
|
43
|
+
$authorization = str_replace('Authorization: ', '', $request->to_header());
|
44
|
+
|
45
|
+
return $this->doPostMultipartFormData2($url, $authorization, $paths, $postData);
|
46
|
+
}
|
47
|
+
|
48
|
+
private function doPostMultipartFormData2($url, $authorization, $paths,$data) {
|
49
|
+
// App::uses('String', 'Utility');
|
50
|
+
debug("aiueo");
|
51
|
+
App::uses('CakeText', 'Utility');
|
52
|
+
//$boundary = String::uuid();
|
53
|
+
$boundary = CakeText::uuid();
|
54
|
+
|
55
|
+
$body = "--{$boundary}\r\n";
|
56
|
+
|
57
|
+
foreach ($data as $key => $value) {
|
58
|
+
$body .= "Content-Disposition: form-data; name=\"{$key}\"\r\n";
|
59
|
+
$body .= "\r\n";
|
60
|
+
$body .= "{$value}\r\n";
|
61
|
+
$body .= "--{$boundary}\r\n";
|
62
|
+
}
|
63
|
+
|
64
|
+
foreach ($paths as $key => $path) {
|
65
|
+
$filename=basename($path);
|
66
|
+
$body .= "Content-Disposition: attachment; filename=\"{$filename}\"\r\n";
|
67
|
+
$body .= "\r\n";
|
68
|
+
$body .= file_get_contents($path) . "\r\n";
|
69
|
+
$body .= "--{$boundary}--\r\n";
|
70
|
+
}
|
71
|
+
|
72
|
+
|
73
|
+
$socket = new HttpSocket();
|
74
|
+
$result = $socket->request(array('method' => 'POST',
|
75
|
+
'uri' => $url,
|
76
|
+
'header' => array(
|
77
|
+
'Authorization' => $authorization,
|
78
|
+
'Content-Type' => "multipart/form-data; boundary={$boundary}"),
|
79
|
+
'body' => $body));
|
80
|
+
$this->fullResponse = $result;
|
81
|
+
|
82
|
+
return $result;
|
83
|
+
}
|
84
|
+
|
85
|
+
```
|
86
|
+
としましたが
|
87
|
+
```lang-php
|
88
|
+
array(
|
89
|
+
'code' => 'json_oauth1_signature_mismatch',
|
90
|
+
'message' => 'OAuth signature does not match',
|
91
|
+
'data' => array(
|
92
|
+
'status' => (int) 401
|
93
|
+
)
|
94
|
+
)
|
95
|
+
```
|
96
|
+
と帰ってきています。認証には問題がなくても、POSTするデータが誤っていると、
|
97
|
+
認証エラーで戻ってくるようなので、認証エラーではないと思います。
|