마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

안드로이드 엑셀파일 업로드 질문입니다

0 추천

안드로이드 앱을 만들고있는데

구글링해보니 이미지 파일 혹은 미디어 파일들의 절대경로를 얻는 방법만 있는데

제가 구현하고자하는 앱은 엑셀파일이나 워드파일 같은것을 서버에 업로드해서 앱 이용자들이 그것을 다운받는 앱을 만드려고 하거든요.. 혹시 도움주실분계실까요

 

제가 시도한 코드는 아래와 같습니다.

 upload_btn_upload2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                upload2(file_path);
                Toast.makeText(Upload2.this,"업로드 완료", Toast.LENGTH_SHORT).show();
                finish();
            }
        });

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if(requestCode == FILE_LIST) {
            check_box.setChecked(true);
            file_path = getPathFromUri3(data.getData());
            File f = new File(file_path);
            text_file_name.setText(f.getName().toString());
        }
    }

public String getPathFromUri3(Uri uri){
        String[] proj = {MediaStore.Files.FileColumns.DATA};// 이부분이 의문입니다 ㅠㅠ
        CursorLoader cursorLoader = new CursorLoader(this, uri, proj, null, null, null);

        Cursor cursor = cursorLoader.loadInBackground();
        int index = cursor.getColumnIndexOrThrow(MediaStore.Files.FileColumns.DATA);

        cursor.moveToFirst();
        return cursor.getString(index);

    }

private void upload2(String uri){
        StorageReference storageRef = storage.getReferenceFromUrl("gs://mopt2-5e36d.appspot.com");

        final Uri file = Uri.fromFile(new File(uri));
        StorageReference riversRef = storageRef.child("files/"+file.getLastPathSegment());
        UploadTask uploadTask = riversRef.putFile(file);

        // Register observers to listen for when the download is done or if it fails
        uploadTask.addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception exception) {
                // Handle unsuccessful uploads
            }
        }).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
            @Override
            public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {

                Uri downloadUrl = taskSnapshot.getDownloadUrl();
                FileDTO fileDTO = new FileDTO();

                fileDTO.fileUrl = downloadUrl.toString();
                fileDTO.fileName = text_name.getText().toString();
                fileDTO.description = text_description.getText().toString();
                // 이거 다시 확인
                fileDTO.userId = auth.getCurrentUser().getEmail();



                database.getReference().child("files").push().setValue(fileDTO);
            }
        });
    }
}

 

참고로 파이어베이스 이용중입니다 도움주시면 정말 감사하겠습니다!!

익명사용자 님이 2018년 9월 19일 질문

1개의 답변

0 추천
제가 알고 있기로 MediaStore는 이미지, 동영상 등 미디어 파일에 대한 정보를 모아 놓은 DB입니다.

저게 필요한 것은 예를들어 이미지를 편집한 뒤에
해당 이미지를 MediaStore에 등록하면 갤러리에서 보여지고자 할 때 쓰는 겁니다.
따라서 일반 파일은 MediaStore를 쓸 필요가 없습니다.

아래 링크를 참고하세요~

https://stackoverflow.com/questions/13209494/how-to-get-the-full-file-path-from-uri/41520090
Will Kim (43,170 포인트) 님이 2018년 9월 19일 답변
답변주셔서 감사합니다
제가 그래서 다른 path찾는 코드를 알아봤는데
public String getPathFromUri2(Uri uri){

        Cursor cursor = getContentResolver().query(uri, null, null, null, null );
        cursor.moveToNext();
        String path = cursor.getString(cursor.getColumnIndex(" "));
        cursor.close();
        return path;

    }

이런 코드를 사용하라고 하더군요
근데 getColumnIndex의 인자로 뭐가들어가야하는지 혹시 아시나요??ㅠㅠ

그냥 data.getdata().getpath();
하니 파일을 읽어들이지못하네요ㅠㅠ
...