Не удалось загрузить изображение/видео в приложение для сохранения его в корзине AWS S3.JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Не удалось загрузить изображение/видео в приложение для сохранения его в корзине AWS S3.

Сообщение Anonymous »

Итак, я создаю приложение, которое будет принимать вводимые пользователем данные и сохранять их в корзине s3.

Код: Выделить всё

package com.example.myapplication;

import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.VideoView;
import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;

import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.auth.CognitoCachingCredentialsProvider;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3Client;
import com.amazonaws.services.s3.model.PutObjectRequest;
import com.amazonaws.regions.Region;
import com.amazonaws.services.s3.model.ObjectMetadata;

import java.io.File;
import java.io.InputStream;

public class MainActivity extends AppCompatActivity {

private static final int IMAGE_PICK_CODE = 1000;
private static final int VIDEO_PICK_CODE = 1001;

AmazonS3 s3Client;
Uri selectedImageUri, selectedVideoUri;
ImageView ivSelectedImage;
VideoView vvSelectedVideo;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

// Initialize AWS S3 client
CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider(
getApplicationContext(),
"Pool_Id", // Identity Pool ID
Regions.Region // Your region
);

BasicAWSCredentials credentials = new BasicAWSCredentials("Access_key", "Secret_key");
s3Client = new AmazonS3Client(credentialsProvider);
s3Client.setRegion(Region.getRegion(Regions.EU_NORTH_1));

ivSelectedImage = findViewById(R.id.ivSelectedImage);
vvSelectedVideo = findViewById(R.id.vvSelectedVideo);
Button btnSelectImage = findViewById(R.id.btnSelectImage);
Button btnSelectVideo = findViewById(R.id.btnSelectVideo);
Button btnSubmit = findViewById(R.id.btnSubmit);

// Handle Image Selection Button Click
btnSelectImage.setOnClickListener(v -> {
openImagePicker();
});

// Handle Video Selection Button Click
btnSelectVideo.setOnClickListener(v -> {
openVideoPicker();
});

// Handle Submit Button Click
btnSubmit.setOnClickListener(v -> {
if (selectedImageUri != null &&  selectedVideoUri != null) {
uploadFileToS3(Uri.fromFile(new File(getPathFromUri(selectedImageUri))), "image");
uploadFileToS3(Uri.fromFile(new File(getPathFromUri(selectedVideoUri))), "video");
} else {
Toast.makeText(MainActivity.this, "Please select an image and video", Toast.LENGTH_SHORT).show();
}
});
}

private void openImagePicker() {
Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
intent.setType("image/*");
startActivityForResult(intent, IMAGE_PICK_CODE);
}

private void openVideoPicker() {
Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Video.Media.EXTERNAL_CONTENT_URI);
intent.setType("video/*");
startActivityForResult(intent, VIDEO_PICK_CODE);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
if (requestCode == IMAGE_PICK_CODE) {
selectedImageUri = data.getData();
ivSelectedImage.setImageURI(selectedImageUri);
} else if (requestCode == VIDEO_PICK_CODE) {
selectedVideoUri = data.getData();
vvSelectedVideo.setVideoURI(selectedVideoUri);
vvSelectedVideo.start();
}
}
}

public void uploadFileToS3(Uri fileUri, String category) {
try {
// Get InputStream from the file URI
InputStream inputStream = getContentResolver().openInputStream(fileUri);
if (inputStream == null) {
Toast.makeText(this, "Failed to open input stream for the file", Toast.LENGTH_SHORT).show();
return;
}

// Create metadata to handle file type and other info
ObjectMetadata metadata = new ObjectMetadata();
metadata.setContentType(getContentResolver().getType(fileUri));  // Set content type (e.g., image/jpeg)

// Generate a unique file name if needed
String fileName = category + "/" + System.currentTimeMillis() + "." + getFileExtension(fileUri);

// Upload the file to S3
PutObjectRequest putObjectRequest = new PutObjectRequest("testbucket3557", fileName, inputStream, metadata);
s3Client.putObject(putObjectRequest);

// Close the input stream
inputStream.close();

Toast.makeText(this, "File uploaded successfully", Toast.LENGTH_SHORT).show();
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(this, e.getMessage(), Toast.LENGTH_LONG).show();
}
}

private String getFileExtension(Uri uri) {
String extension = "";
String mimeType = getContentResolver().getType(uri);
if (mimeType != null) {
String[] parts = mimeType.split("/");
if (parts.length > 1) {
extension = parts[1];  // Extract file extension
}
}
return extension;
}

public String getPathFromUri(Uri uri) {
String[] projection = {MediaStore.Images.Media.DATA};
Cursor cursor = getContentResolver().query(uri, projection, null, null, null);
if (cursor != null) {
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(projection[0]);
String filePath = cursor.getString(columnIndex);
cursor.close();
return filePath;
} else {
return uri.getPath();
}
}
}

Это мой код mainActivity.java А это файл AndroidManifest.xml
Я пытался редактировать разрешения, но ничего не помогло. Конкретная ошибка показана на изображении. Та же ошибка и для видео
введите здесь описание изображения

Подробнее здесь: https://stackoverflow.com/questions/791 ... -s3-bucket
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»