質問編集履歴

4

URIのログ出力とエラーコードについて追記しました

2021/06/27 00:55

投稿

KumaChan
KumaChan

スコア37

test CHANGED
File without changes
test CHANGED
@@ -108,9 +108,19 @@
108
108
 
109
109
 
110
110
 
111
- そもそものURIが間違っていたのかもしれないと考え、別のところでURIからビットマップを生成してimageViewに表示する記述を行ったところ、正常に表示されました。
111
+ そもそものURIが間違っていたのかもしれないと考え、別のところでURIからビットマップを生成してimageViewに表示する記述を行ったところ、正常に表示されました。また、URIをログ出力した結果は以下の通りで、正常に取得できていると思います。
112
+
113
+
114
+
115
+ /0/1/content://media/external/images/media/73102/ORIGINAL/NONE/image/jpeg/122683034
116
+
117
+
112
118
 
113
119
  ただ、その直後にFileInputStreamを生成しようとすると、やはりFileNotFoundExceptionが発生します。
120
+
121
+
122
+
123
+ java.io.FileNotFoundException: /0/1/content:/media/external/images/media/73102/ORIGINAL/NONE/image/jpeg/122683034 (No such file or directory)
114
124
 
115
125
 
116
126
 

3

より具体的な問題の個所を追記し、全体的に改訂いたしました

2021/06/27 00:55

投稿

KumaChan
KumaChan

スコア37

test CHANGED
@@ -1 +1 @@
1
- Androidの動画アップロード動画をバイト配列にする方法わかりせん
1
+ AndroidのFileInputStreamFileNotFoundException発生し
test CHANGED
@@ -1,58 +1,154 @@
1
1
  Androidで画像や動画をHTTPアップロードするアプリを開発しています。
2
2
 
3
- 画像については以下のようにバイト配列に変換でたのですが、動画ついはその方法がわかりせん
3
+ ファイルパスからファイルを作り、バイト配列に変換して送ることまわかったのですが、変換時FileNotFoundExceptionが発生しいます
4
4
 
5
5
 
6
6
 
7
7
  ```ここに言語を入力
8
8
 
9
- // 画像をバイト配列に(↓動画の場合はどうすればよいのでしょうか)
9
+ // データをバイト配列に
10
10
 
11
- ByteArrayOutputStream bos = new ByteArrayOutputStream();
11
+ File file = new File(uri.getPath());
12
12
 
13
- bmp.compress(Bitmap.CompressFormat.JPEG, 90, bos);
13
+ byte[] bytes = null;
14
14
 
15
- // HTTP通信の準備
15
+ // ここでFileNotFoundExceptionが発生します
16
16
 
17
- con = (HttpURLConnection) url.openConnection();
17
+ try (FileInputStream inputStream = new FileInputStream(file);
18
18
 
19
- con.setConnectTimeout(5000);
19
+ ByteArrayOutputStream bos = new ByteArrayOutputStream();) {
20
20
 
21
- con.setReadTimeout(5000);
21
+ byte[] buffer = new byte[1024];
22
22
 
23
- con.setRequestMethod("POST");
23
+ int len = 0;
24
24
 
25
- con.setRequestProperty("Connection", "Keep-Alive");
25
+ while((len = inputStream.read(buffer)) != -1) {
26
26
 
27
- con.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary);
27
+ bos.write(buffer, 0, len);
28
28
 
29
- con.setRequestProperty("Accept-Charset", "UTF-8");
29
+ }
30
30
 
31
- con.setUseCaches(false);
31
+ bytes = bos.toByteArray();
32
32
 
33
- con.setDoOutput(true);
33
+ } catch (Exception e) {
34
34
 
35
- // 出力ストリームを生成
35
+ e.printStackTrace();
36
36
 
37
- dos = new DataOutputStream(con.getOutputStream());
37
+ }
38
38
 
39
- // 出力ストリームにファイルを書き込み
39
+ // ストリーム開始
40
40
 
41
- dos.writeBytes(breaks + hyphens + boundary + breaks);
41
+ try {
42
42
 
43
- dos.writeBytes("Content-Disposition: form-data; name=\"upfile\"; filename=\"upfile.jpg\"" + breaks + breaks);
43
+ // 通信の準備
44
44
 
45
- dos.write(bos.toByteArray());
45
+ con = (HttpURLConnection) url.openConnection();
46
46
 
47
- dos.writeBytes(breaks + hyphens + boundary + hyphens + breaks);
47
+ con.setConnectTimeout(5000);
48
48
 
49
- // 出力を閉じる
49
+ con.setReadTimeout(5000);
50
50
 
51
+ con.setRequestMethod("POST");
52
+
53
+ con.setRequestProperty("Connection", "Keep-Alive");
54
+
55
+ con.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary);
56
+
57
+ con.setRequestProperty("Accept-Charset", "UTF-8");
58
+
59
+ con.setUseCaches(false);
60
+
61
+ con.setDoOutput(true);
62
+
63
+ // 出力ストリームを生成
64
+
65
+ dos = new DataOutputStream(con.getOutputStream());
66
+
67
+ // 出力ストリームにファイルを書き込み
68
+
69
+ dos.writeBytes(breaks + hyphens + boundary + breaks);
70
+
71
+ dos.writeBytes("Content-Disposition: form-data; name=\"upfile\"; filename=\"upfile.jpg\"" + breaks + breaks);
72
+
73
+ dos.write(bytes);
74
+
75
+ dos.writeBytes(breaks + hyphens + boundary + hyphens + breaks);
76
+
77
+ // 出力ストリームにテキストを書き込み
78
+
79
+ dos.writeBytes(hyphens + boundary + breaks);
80
+
81
+ dos.writeBytes("Content-Disposition: form-data; name=\"textpart\"" + breaks + breaks);
82
+
83
+ // 通信スタート
84
+
85
+ con.connect();
86
+
87
+ // レスポンスを取得
88
+
89
+ res = new Streamer().convert(con.getInputStream());
90
+
91
+ // 出力を閉じる
92
+
51
- dos.close();
93
+ dos.close();
94
+
95
+ } catch (IOException e) {
96
+
97
+ e.printStackTrace();
98
+
99
+ } finally {
100
+
101
+ // 通信を閉じる
102
+
103
+ con.disconnect();
104
+
105
+ }
52
106
 
53
107
  ```
54
108
 
109
+
110
+
111
+ そもそものURIが間違っていたのかもしれないと考え、別のところでURIからビットマップを生成してimageViewに表示する記述を行ったところ、正常に表示されました。
112
+
113
+ ただ、その直後にFileInputStreamを生成しようとすると、やはりFileNotFoundExceptionが発生します。
114
+
115
+
116
+
117
+ ```ここに言語を入力
118
+
119
+ // ビットマップ表示は正常に行われます
120
+
121
+ try {
122
+
123
+ bmp = MediaStore.Images.Media.getBitmap(getContentResolver(), uri);
124
+
125
+ } catch (IOException e) {
126
+
127
+ e.printStackTrace();
128
+
129
+ }
130
+
131
+ imageView.setImageBitmap(bmp);
132
+
133
+ // が、ここでやっぱりFileNotFoundExceptionが発生
134
+
135
+ File file = new File(uri.getPath());
136
+
137
+ try {
138
+
139
+ FileInputStream inputStream = new FileInputStream(file);
140
+
141
+ } catch (FileNotFoundException e) {
142
+
143
+ e.printStackTrace();
144
+
145
+ }
146
+
147
+ ```
148
+
149
+
150
+
55
- 動画ファイル(またはファイルパス)をバイト配列にすにはどうしたらよいのでしょうか。
151
+ FileInputStreamの使い方が間違っているのでしょうか。
56
152
 
57
153
 
58
154
 

2

タイトルをより具体的にしました

2021/06/26 22:53

投稿

KumaChan
KumaChan

スコア37

test CHANGED
@@ -1 +1 @@
1
- Android動画アップロードする方法がわかりません
1
+ Android動画アップロードで動画をバイト配列にする方法がわかりません
test CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
  ```ここに言語を入力
8
8
 
9
- // 画像をバイト配列に(これの動画のようなものはないのでしょうか)
9
+ // 画像をバイト配列に(動画の場合はどうすればよいのでしょうか)
10
10
 
11
11
  ByteArrayOutputStream bos = new ByteArrayOutputStream();
12
12
 

1

バイト配列の個所にコメントを入れました

2021/06/25 01:39

投稿

KumaChan
KumaChan

スコア37

test CHANGED
File without changes
test CHANGED
@@ -6,11 +6,11 @@
6
6
 
7
7
  ```ここに言語を入力
8
8
 
9
- // 画像をバイト配列に
9
+ // 画像をバイト配列に(これの動画版のようなものはないのでしょうか)
10
10
 
11
- **ByteArrayOutputStream bos = new ByteArrayOutputStream();
11
+ ByteArrayOutputStream bos = new ByteArrayOutputStream();
12
12
 
13
- bmp.compress(Bitmap.CompressFormat.JPEG, 90, bos);**
13
+ bmp.compress(Bitmap.CompressFormat.JPEG, 90, bos);
14
14
 
15
15
  // HTTP通信の準備
16
16