# 파일 공유

# 라이브러리 사용 방법

해당 라이브러리는 따로 API KEY를 발급받거나 CMS에서 설정해야 하는 사전 설정이 없습니다.
아래 내용을 읽고 진행하시면 됩니다.


  1. 파일 업로드

파일을 업로드 하기 위해서는 먼저 미디어파일의 접근권한이 있어야 하며,
파일의 절대 경로 또는 파일객체를 받아왔다는 가정하에 진행을 합니다.

  1. 파일 업로드 하고자 하는 파일을 서버로 전송 파일을 전송하기 위해서는 roomId 가 필요합니다. 파라미터는 fileUpload(룸 ID, 파일 명, 파일 객체, 업로드 리스너, 콜백함수) 로 전달을 하게 되고 아래는 그 예제입니다.
VChatCloudApi.getInstance().fileUpload(options.channelKey, file_name, file, listener, new ApiCallback() {
  @Override
    public void onFailure(VChatCloudException e) {
        Log.e(TAG, "onFailure: " + e);
    }

    @Override
    public void onSuccess(JSONObject json) {
        Log.d(TAG, json.toString());
    }
});

1
2
3
4
5
6
7
8
9
10
11
12
  1. 업로드 중 리스너를 통해서 진행상태를 업데이트가 가능하며 코드는 아래와 같이 구현을 하면 됩니다.
private ProgressRequestManager.Listener  listener = new ProgressRequestManager.Listener() {
    @Override
    public void onProgress(int progress) {
        Log.d("onProgress", progress + "%");
    }
};
1
2
3
4
5
6
  1. 업로드가 완료가 되면 onSuccess 또는 onFailure 리턴이 되어지고, 성공 시 처리는 아래와 같습니다.
@Override
public void onSuccess(JSONObject json) {
  Log.d(TAG, json.toString());
  JSONObject data = (JSONObject) json.get("data");
  JSONObject param = new JSONObject();
  JSONObject message = new JSONObject();
  JSONArray list = new JSONArray();
  JSONObject messageType = new JSONObject();
  message.put("id", data.get("fileKey"));
  message.put("name", data.get("fileNm"));
  message.put("type", data.get("fileExt"));
  message.put("size", data.get("fileSize"));
  message.put("expire", data.get("expire"));
  list.add(message);
  messageType.put("profile", String.valueOf(nick_icon_index + 1));

  param.put("message", list.toJSONString());
  param.put("mimeType", "file");
  param.put("messageType", messageType.toJSONString());
  if (userInfo != null) {
      param.put("userInfo", userInfo.toJSONString());
  }

  // 공통 전송메소드 발췌
  channel.sendMessage(param, (o, e) -> {
      if (e != null) {
          Log.d(TAG,"메시지 전송오류");
      }
  });
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
JSONObject 리턴 데이터
서브 식별자 설명
result_msg - String 실패 시 사유
result_cd - int 성공 (1), 실패(0)
data Object 서버에서 받은 OpenGraph정보 - 없을경우 빈값으로 대체
fileNm String 업로드한 파일 명
fileSize String 파일 사이즈
expire String 파일 유효기간
fileKey String 파일 고유키
fileSizeText String 파일 사이즈 텍스트
fileExt String 파일 확장자
  1. 메시지로 공유되어진 파일타입의 경우 mimeTypefile 으로 되어있으니, id 값을 이용하여 바이너리를 다운로드 합니다.
    이때 안드로이드에서 다운로드는 Thread 로 요청해야 동작을 합니다.
new Thread(() -> {
  boolean downFlag = true;
  String url = Constant.BASE + Constant.LOADFILE + "?fileKey=" + object.get("id");
  URL _url = new URL(url);
  URLConnection urlConnection = _url.openConnection();
  int all = urlConnection.getContentLength();

  InputStream inputStream = urlConnection.getInputStream();
  File file1 = new File("파일 디렉토리", "파일 명");
  file1.setReadable(true);
  file1.setWritable(true);
  file1.setExecutable(true);
  file1.createNewFile();
  if (file1.canWrite()) {
      FileOutputStream fileOutputStream = new FileOutputStream(file1);
      byte[] bytes = new byte[1024];
      int len;
      try {
          while ((len = inputStream.read(bytes)) > 0 ) {
              fileOutputStream.write(bytes, 0, len);
          }
      } catch (SocketException se) {
          downFlag = false;
          file1.delete();
      } finally {
          fileOutputStream.close();
      }

  }
  inputStream.close();
  if (downFlag) {
      Runtime.getRuntime().exec("chmod 755" + file1.getPath());
      handler.sendMessage(handler.obtainMessage()); // 성공 화면 처리
      fileFlag = true;
  } else {
      fileFlag = true;
      goneHandler.sendMessage(goneHandler.obtainMessage()); // 실패 화면 처리
  }

  handler.sendMessage(handler.obtainMessage());
  fileFlag = true;
}).start();

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
Copyright 2022. E7Works Inc. & JOYTUNE Corp. All Rights Reserved.