teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

6

タイトル修正

2017/08/13 11:03

投稿

Nanohana
Nanohana

スコア123

title CHANGED
@@ -1,1 +1,1 @@
1
- $bodWordpress APIで画像を投稿したい
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

改善

2017/08/13 11:03

投稿

Nanohana
Nanohana

スコア123

title CHANGED
File without changes
body CHANGED
@@ -93,4 +93,6 @@
93
93
  が、ファイルが246kbと適切な大きさはあるようですが、画像の表示に失敗します。
94
94
  ![イメージ説明](018a7404d1179c5e22590a83d4fba9b1.png)
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

追記

2017/08/13 09:43

投稿

Nanohana
Nanohana

スコア123

title CHANGED
File without changes
body CHANGED
@@ -92,4 +92,5 @@
92
92
  としました。一応、ファイル自体のアップロードには成功しました。
93
93
  が、ファイルが246kbと適切な大きさはあるようですが、画像の表示に失敗します。
94
94
  ![イメージ説明](018a7404d1179c5e22590a83d4fba9b1.png)
95
- 何が原因でしょうか
95
+ 何が原因でしょうか
96
+ 何かHeaderやbodyで足らない情報あるんですかね...

3

\$bodyを変更

2017/08/13 09:39

投稿

Nanohana
Nanohana

スコア123

title CHANGED
@@ -1,1 +1,1 @@
1
- Wordpress APIで画像を投稿したい
1
+ $bodWordpress APIで画像を投稿したい
body CHANGED
@@ -81,11 +81,7 @@
81
81
  'Content-Type'=> "image/jpeg"
82
82
  //"content"=>"$nakami",
83
83
  ),
84
- 'body' => array(
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

進捗報告

2017/08/13 08:33

投稿

Nanohana
Nanohana

スコア123

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
- // App::uses('String', 'Utility');
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' => $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
+ ![イメージ説明](018a7404d1179c5e22590a83d4fba9b1.png)
99
+ 何が原因でしょうか

1

追記

2017/08/13 06:44

投稿

Nanohana
Nanohana

スコア123

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
+ 認証エラーで戻ってくるようなので、認証エラーではないと思います。