>source

rxJava를 사용하여 여러 이미지를 ASW에 업로드하려고합니다. kotlin 예제를 찾았습니다.

Android에서 Amazon S3로 여러 이미지 (거의 100 개)를 업로드 하시겠습니까?.

Java를 사용하여 구현하려고했습니다. 그러나 적절한 방법을 찾을 수 없습니다. 누구든지 저를 도울 수 있습니까?

public void processImageFiles(){
        uploadedImageInfo = new ArrayList<>();
        List<Single<Boolean>> uploadList = new ArrayList<>();
         for(File file : selectedImageList){
            String fileExtension = MimeTypeMap.getFileExtensionFromUrl(file.toString());
            String fileName = Calendar.getInstance().getTimeInMillis() + sharedPref.getSharedPrefData(SharedPref.USER_ID) + "." + fileExtension;
            String uploadedFileLink = "https://" + ApiClient.BUCKET_NAME + "." + ApiClient.AWS_END_POINT + "/" + fileName;
            RecordData recordData =  new RecordData();
            recordData.setUrl(uploadedFileLink);
            recordData.setFileType(fileExtension);
            recordData.setFileName(fileName);
            uploadedImageInfo.add(recordData);
            uploadList.add(uploadToAWS(file, recordData));
        }
         
    }
    public Single<Boolean> uploadToAWS(File imageFile, RecordData data) {
        return Single.create(emitter -> {
            AmazonS3 s3Client = new AmazonS3Client(new BasicAWSCredentials(ApiClient.ACCESS_KEY, ApiClient.SECRET_KEY));
            String uploadLink = ApiClient.BUCKET_NAME;
            s3Client.setEndpoint(ApiClient.AWS_END_POINT);
            s3Client.setRegion(Region.getRegion(Regions.US_EAST_1));
            TransferUtility transferUtility = new TransferUtility(s3Client, mContext);
            TransferObserver transferObserver = transferUtility.upload(uploadLink, data.getFileName(), imageFile, CannedAccessControlList.PublicRead);
            mContext.registerReceiver(TransferNetworkLossHandler.getInstance(mContext), new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
            transferObserver.setTransferListener(new TransferListener() {
                @Override
                public void onStateChanged(int id, TransferState state) {
                    Log.e("onStateChanged", state.name() + "");
                    if (state.name().equals(TransferState.COMPLETED.name())) {
                        emitter.onSuccess(true);
                    } else {
                        emitter.onError(null);
                    }
                }
                @Override
                public void onProgressChanged(int id, long bytesCurrent, long bytesTotal) {
                    //Implement the code to handle the file uploaded progress.
                    Log.e("e", bytesCurrent + "");
                }
                @Override
                public void onError(int id, Exception exception) {
                    emitter.onError(exception);
                }
            });
        });
    }

  • 답변 # 1

    여러 요청을 병렬로 실행하는 것과 관련된 유사한 질문에 이미 답변했습니다. 여기에서 찾을 수 있습니다

    이 구현을 제안 할 수 있습니다.

    public final class RecordData {
        private final String url;
        private final String fileType;
        private final String fileName;
        public RecordData(String url, String fileType, String fileName) {
            this.url = url;
            this.fileType = fileType;
            this.fileName = fileName;
        }
        public String getUrl() {
            return url;
        }
        public String getFileType() {
            return fileType;
        }
        public String getFileName() {
            return fileName;
        }
    }
    public RecordData toRecord(File file) {
        String fileExtension = MimeTypeMap.getFileExtensionFromUrl(file.toString());
        String fileName = Calendar.getInstance().getTimeInMillis() + sharedPref.getSharedPrefData(SharedPref.USER_ID) + "." + fileExtension;
        String uploadedFileLink = "https://" + ApiClient.BUCKET_NAME + "." + ApiClient.AWS_END_POINT + "/" + fileName;
        return new RecordData(uploadedFileLink, fileExtension, fileName);
    }
    public void processImageFiles(List<File> selectedImageList) {
        Observable.fromIterable(selectedImageList)
                .flatMapSingle(file -> uploadToAWS(file, toRecord(file)).subscribeOn(Schedulers.io()))
                .subscribe();
    }
    
    

관련 자료

  • 이전 reactjs - useContext가 정의되지 않은 nextjs를 반환합니다
  • 다음 R - 아르 자형 - dplyr summarize 함수에서 누락 된 값과 nan을 제거하는 방법은 무엇입니까?