NIMSDK-AOS  10.5.0
FileAttachment.java
浏览该文件的文档.
1 package com.netease.nimlib.sdk.msg.attachment;
2 
3 import android.net.Uri;
4 import android.text.TextUtils;
5 import com.netease.nimlib.NimNosSceneKeyConstant;
6 import com.netease.nimlib.SDKCache;
8 import com.netease.nimlib.util.JSONHelper;
9 import com.netease.nimlib.util.MD5;
10 import com.netease.nimlib.util.StringUtil;
11 import com.netease.nimlib.util.storage.NimStorageType;
12 import com.netease.nimlib.util.storage.NimStorageUtil;
13 import java.io.File;
14 import org.json.JSONObject;
15 
20 public class FileAttachment implements MsgAttachment {
21 
22  private static final String TAG = "FileAttachment";
23  public static final String KEY_DOT = ".";
24 
28  protected String path;
29 
33  protected long size;
34 
38  protected String md5;
39 
43  protected String url;
44 
48  protected String displayName;
49 
53  protected String extension;
54 
58  private long expire;
59 
63  protected String nosTokenSceneKey = NimNosSceneKeyConstant.NIM_DEFAULT_IM;
64 
68  protected boolean forceUpload = false;
72  private boolean isUri = false;
73 
74  public FileAttachment() {
75 
76  }
77 
78  public FileAttachment(String attach) {
79  fromJson(attach);
80  }
81 
87  public String getPath() {
88  String path = getPathForSave();
89  return new File(path).exists() ? path : null;
90  }
91 
97  public String getPathForSave() {
98  if (!isUri && !TextUtils.isEmpty(path)) {
99  return path;
100  } else {
101  return NimStorageUtil.getWritePath(getFileName(), storageType());
102  }
103  }
104 
110  public String getThumbPath() {
111  String path = getThumbPathForSave();
112  return new File(path).exists() ? path : null;
113  }
114 
120  public String getThumbPathForSave() {
121  String fileName = getFileName();
122  if (!TextUtils.isEmpty(fileName)) {
123  int dotIndex = fileName.lastIndexOf(".");
124  // 如果找到了 '.' 而且最后一个字符不是 '.',则需要进行裁剪
125  if (dotIndex >= 0 && dotIndex < fileName.length() - 1) {
126  fileName = fileName.substring(0, dotIndex);
127  }
128  }
129  return NimStorageUtil.getWritePath(fileName, NimStorageType.TYPE_THUMB_IMAGE);
130  }
131 
137  public void setPath(String path) {
138  this.path = path;
139  this.isUri = UriUtils.isFileOrContentUri(path);
140  }
141 
149  public boolean setUri(Uri uri) {
150  if(uri == null)
151  {
152  return false;
153  }
154 
155  if(!UriUtils.isFileOrContentUri(uri))
156  {
157  return false;
158  }
159  isUri = true;
160  this.path = uri.toString();
161  return true;
162  }
163 
164  public Uri getUri() {
165  if(!isUri)
166  {
167  return null;
168  }
169  return UriUtils.string2Uri(path);
170  }
171 
172 
173 
179  public long getSize() {
180  return size;
181  }
182 
188  public void setSize(long size) {
189  this.size = size;
190  }
191 
197  public String getMd5() {
198  return md5;
199  }
200 
206  public void setMd5(String md5) {
207  this.md5 = md5;
208  }
209 
215  public String getUrl() {
216  return url;
217  }
218 
224  public void setUrl(String url) {
225  this.url = url;
226  }
227 
233  public String getExtension() {
234  return extension;
235  }
236 
242  public void setExtension(String extension) {
243  this.extension = extension;
244  }
245 
251  public String getFileName() {
252  if(isUri)
253  {
254  return UriUtils.getFileNameFromUri(SDKCache.getContext(),UriUtils.string2Uri(path));
255  }
256  else if (!TextUtils.isEmpty(path)) {
257  return StringUtil.nameOfPath(path);
258  } else {
259  if (TextUtils.isEmpty(md5)) {
260  return MD5.getStringMD5(url);
261  } else {
262  return md5;
263  }
264  }
265  }
266 
272  public String getDisplayName() {
273  return displayName;
274  }
275 
281  public void setDisplayName(String displayName) {
282  this.displayName = displayName;
283  }
284 
285 
291  public String getNosTokenSceneKey() {
292  return nosTokenSceneKey;
293  }
294 
300  public void setNosTokenSceneKey(String nosTokenSceneKey) {
301  if (TextUtils.isEmpty(nosTokenSceneKey)) {
302  return;
303  }
304  this.nosTokenSceneKey = nosTokenSceneKey;
305  }
306 
307  public long getExpire() {
308  return expire;
309  }
310 
316  public boolean isForceUpload() {
317  return forceUpload;
318  }
319 
325  public void setForceUpload(boolean forceUpload) {
326  this.forceUpload = forceUpload;
327  }
328 
329  protected NimStorageType storageType() {
330  return NimStorageType.TYPE_FILE;
331  }
332 
333  protected void save(JSONObject json) {
334 
335  }
336 
337  protected void load(JSONObject json) {
338 
339  }
340 
341  public static final String KEY_PATH = "path";
342  public static final String KEY_NAME = "name";
343  public static final String KEY_SIZE = "size";
344  public static final String KEY_MD5 = "md5";
345  public static final String KEY_URL = "url";
346  public static final String KEY_EXT = "ext";
347  public static final String KEY_SCENE = "sen";
348  public static final String KEY_FORCE_UPLOAD = "force_upload";
349  public static final String KEY_EXPIRE = "expire";
350 
351  public static final String KEY_V2_INTERNAL_UPLOAD_STATE = "KEY_V2_INTERNAL_UPLOAD_STATE";
352 
353  @Override
354  public String toJson(boolean send) {
355  JSONObject object = new JSONObject();
356  try {
357  if (!send && !TextUtils.isEmpty(path)) {
358  object.put(KEY_PATH, path);
359  }
360 
361  if (!TextUtils.isEmpty(md5)) {
362  object.put(KEY_MD5, md5);
363  }
364 
365  if (!TextUtils.isEmpty(displayName)) {
366  object.put(KEY_NAME, displayName);
367  }
368 
369  object.put(KEY_URL, url);
370  object.put(KEY_SIZE, size);
371 
372 
373  if (!TextUtils.isEmpty(extension)) {
374  object.put(KEY_EXT, extension);
375  }
376  if (!TextUtils.isEmpty(nosTokenSceneKey)) {
377  object.put(KEY_SCENE, nosTokenSceneKey);
378  }
379 
380  if (expire > 0) {
381  object.put(KEY_EXPIRE, expire);
382  }
383 
384  object.put(KEY_FORCE_UPLOAD, forceUpload);
385  save(object);
386 
387  } catch (Exception e) {
388  e.printStackTrace();
389  }
390 
391  return object.toString();
392  }
393 
394  private void fromJson(String attach) {
395  JSONObject json = JSONHelper.parse(attach);
396  if(json == null)
397  {
398  return;
399  }
400  path = JSONHelper.getString(json, KEY_PATH);
401  Uri uri = UriUtils.string2Uri(path);
403  {
404  isUri = true;
405  }
406  md5 = JSONHelper.getString(json, KEY_MD5);
407  url = JSONHelper.getString(json, KEY_URL);
408  displayName = JSONHelper.getString(json, KEY_NAME);
409  size = JSONHelper.getLong(json, KEY_SIZE);
410  extension = JSONHelper.getString(json, KEY_EXT);
411  if(extension != null && extension.startsWith(KEY_DOT))
412  {
413  extension = extension.substring(1);
414  }
415  setNosTokenSceneKey(JSONHelper.getString(json, KEY_SCENE));
416  forceUpload = JSONHelper.getBoolean(json, KEY_FORCE_UPLOAD);
417  expire = JSONHelper.getLong(json, KEY_EXPIRE);
418  load(json);
419  }
420 }
String getUrl()
获取文件在服务器上的下载url。若文件还未上传,返回null
String nosTokenSceneKey
上传文件时用的对token对应的场景,默认NimNosSceneKeyConstant#NIM_DEFAULT_IM
static String getFileNameFromUri(Context context, Uri uri)
Definition: UriUtils.java:270
void setExtension(String extension)
设置文件后缀名
boolean setUri(Uri uri)
设置文件uri, 仅支持ContentResolver.SCHEME_FILE类型和ContentResolver.SCHEME_CONTENT类型的uri 仅支持发...
static boolean isFileOrContentUri(String uriString)
判断URI是否为File或者Content类型URI File类型URI表示私有文件 Content类型URI表示共享文件,如图片,音频...
Definition: UriUtils.java:115
static Uri string2Uri(String uriString)
Definition: UriUtils.java:20
带有文件的附件类型的基类 描述文件的相关信息
String getPath()
获取文件本地路径,若文件不存在,返回null
void setForceUpload(boolean forceUpload)
设置文件是否强制重新上传,默认false
String getThumbPath()
获取缩略图文件的本地路径,若文件不存在,返回null
String getDisplayName()
获取文件的显示名。可以和文件名不同,仅用于界面展示
boolean forceUpload
如果服务器存在相同的附件文件,是否强制重新上传 , 默认false
boolean isForceUpload()
文件是否强制重新上传
void setMd5(String md5)
设置文件内容MD5
void setPath(String path)
设置文件路径
void setNosTokenSceneKey(String nosTokenSceneKey)
设置文件上传时的nos scene
String getThumbPathForSave()
获取用于保存缩略图文件的位置
void setDisplayName(String displayName)
设置文件显示名
void setUrl(String url)
设置文件在服务器上的下载url
long getSize()
获取文件大小,单位为byte
String toJson(boolean send)
将消息附件序列化为字符串,存储到消息数据库或发送到服务器。
String getPathForSave()
获取用于保存该文件的位置
String getNosTokenSceneKey()
获取文件上传时的nos scene
void setSize(long size)
设置文件大小,单位为byte