uploadFile
功能介绍
说明
通过 SDK 上传文件。
- iOS
- Android
- Flutter
- uni-app
- Browser/Electron/MiniProgram
- React-Native
函数原型
Future uploadFile({
required String id,
required String filePath,
required String fileName,
String? contentType,
String? cause,
String? operationID,
});
输入参数
参数名称 | 参数类型 | 是否必填 | 描述 |
---|---|---|---|
filePath | String | 是 | 文件在本机的完整路径 |
id | String | 是 | 上传的唯一 ID |
fileName | String | 是 | 文件名字 |
cause | NSString | 否 | 文件分类 |
contentType | NSString | 否 | 文件的mimeType |
返回结果
名称 | 类型 | 描述 |
---|---|---|
~ | String | 返回"{"url":"xxxx"}" |
代码示例
final result = await OpenIM.iMManager.uploadFile(
id: const Uuid().v4(),
filePath: path,
fileName: path,
);
if (result is String) {
final url = jsonDecode(result)['url'];
Logger.print('url:$url');
}
### 函数原型
- (void)uploadFile:(NSString *)fullPath
name:(NSString * _Nullable)name
cause:(NSString * _Nullable)cause
onProgress:(OIMUploadProgressCallback)onProgress
onCompletion:(OIMUploadCompletionCallback)onCompletion
onSuccess:(OIMSuccessCallback)onSuccess
onFailure:(OIMFailureCallback)onFailure;
输入参数
参数名称 | 参数类型 | 是否必填 | 描述 |
---|---|---|---|
fullPath | NSString | 是 | 文件在本机的完整路径 |
cause | NSString | 否 | 文件分类 |
name | NSString | 否 | 文件名字 |
返回结果
名称 | 类型 | 描述 |
---|---|---|
onProgress | NSInteger | 上传进度 |
onCompletion | OIMUploadCompletionCallback | 上传完成 |
onSuccess | OIMSuccessCallback | 成功返回 |
onFailure | OIMFailureCallback | 失败返回 |
代码示例
[OIMManager.manager uploadFile:@""
name:nil
cause:nil
onProgress:^(NSInteger saveBytes, NSInteger currentBytes, NSInteger totalBytes) {
} onCompletion:^(NSInteger totalBytes, NSString * _Nonnull url, NSInteger putType) {
} onSuccess:^(NSString * _Nullable data) {
} onFailure:^(NSInteger code, NSString * _Nullable msg) {
}];
函数原型
public void uploadFile(OnBase<String> base, OnPutFileListener listener,
PutArgs putArgs)
输入参数
PutArgs 实体必传下面两个参数
参数名称 | 参数类型 | 是否必填 | 描述 |
---|---|---|---|
fullPath | String | 是 | 文件在本机的完整路径 |
putID | String | 否 | 上传的唯一ID |
代码示例
OpenIMClient.getInstance().uploadFile(new OnBase<String>() {
public void onError(int code, String error) {
}
public void onSuccess(String data) {
}
}, new OnPutFileListener() {
public void hashComplete(String hash, long total) {
}
public void hashProgress(long current, long total) {
}
public void open(long size) {
}
public void putComplete(long total, long putType) {
}
public void putProgress(long save, long current, long total) {
}
public void putStart(long current, long total) {
}
},putArgs);
函数原型
IMSDK.uploadFile({
name: string;
contentType: string;
uuid: string;
file?: File;
filepath?: string; // 仅在electron中使用ffi方式调用时有效
cause?: string
},operationID?: string): Promise<WsResponse<{url:string}>>
输入参数
参数名称 | 参数类型 | 是否必填 | 描述 |
---|---|---|---|
name | string | 是 | 文件名 |
contentType | string | 是 | 文件类型 |
uuid | string | 是 | 文件唯一 ID |
file | string | 否 | 文件对象 |
filepath | string | 否 | 文件绝对路径, 仅在electron中使用ffi方式调用时有效 |
cause | string | 否 | 文件分类 |
返回结果
参数名称 | 参数类型 | 描述 |
---|---|---|
Promise.then() | Promise<WsResponse<{url:string}>> | 文件远程链接 |
Promise.catch() | Promise<WsResponse> | 调用失败回调 |
代码示例
import { getSDK } from '@openim/wasm-client-sdk';
const IMSDK = getSDK();
// use in electron with ffi
// import { getWithRenderProcess } from '@openim/electron-client-sdk/lib/render';
// const { instance: IMSDK } = getWithRenderProcess();
// use in mini program
// import { OpenIMSDK } from 'open-im-sdk';
// const IMSDK = new OpenIMSDK();
IMSDK.uploadFile({
name: 'fileName.zip',
contentType: 'zip',
uuid: 'uuid',
cause: '',
file: File, // web端传入文件对象
// filepath: 'path://...' // 仅在electron中使用ffi方式调用时有效, 此时file不传
})
.then(({ data: { url } }) => {
// url: 文件远程链接
})
.catch(({ errCode, errMsg }) => {
// 上传失败
});
函数原型
IMSDK.asyncApi('uploadFile', operationID: string, {
name: string;
contentType: string;
uuid: string;
filepath: string;
}): Promise<{url:string}>
输入参数
参数名称 | 参数类型 | 是否必填 | 描述 |
---|---|---|---|
operationID | string | 是 | 操作 ID,用于定位问题,保持唯一,建议用当前时间和随机数 |
name | string | 是 | 文件名 |
contentType | string | 是 | 文件类型 |
uuid | string | 是 | 文件唯一 ID |
filepath | string | 是 | 文件绝对路径 |
返回结果
通过
openim-uniapp-polyfill
包将函数 Promise 化,调用时需要使用then
和catch
判断并处理成功和失败回调。
参数名称 | 参数类型 | 描述 |
---|---|---|
Promise.then() | Promise<{url:string}> | 文件远程链接 |
Promise.catch() | Promise<CatchResponse> | 调用失败回调 |
代码示例
import IMSDK from 'openim-uniapp-polyfill';
IMSDK.asyncApi('uploadFile', IMSDK.uuid(), {
name: 'fileName.zip',
contentType: 'zip',
uuid: 'uuid',
filepath: 'path://...',
})
.then((data) => {
// data: 文件远程链接
})
.catch(({ errCode, errMsg }) => {
// 调用失败
});
函数原型
OpenIMSDKRN.uploadFile({
name: string;
contentType: string;
uuid: string;
filepath: string;
}, operationID: string): Promise<{ url: string }>
输入参数
参数名称 | 参数类型 | 是否必填 | 描述 |
---|---|---|---|
name | string | 是 | 文件名 |
contentType | string | 是 | 文件类型 |
uuid | string | 是 | 文件唯一 ID |
filepath | string | 是 | 文件绝对路径 |
operationID | string | 是 | 操作 ID,用于定位问题,保持唯一,建议用当前时间和随机数 |
返回结果
参数名称 | 参数类型 | 描述 |
---|---|---|
Promise.then() | Promise<{url:string}> | 文件远程链接 |
Promise.catch() | Promise<CatchResponse> | 调用失败回调 |
代码示例
import OpenIMSDKRN from "open-im-sdk-rn";
OpenIMSDKRN.uploadFile({
name: 'fileName.zip',
contentType: 'zip',
uuid: 'uuid',
filepath: 'path://...',
}, 'operationID')
.then((data) => {
// data: 文件远程链接
})
.catch(({ errCode, errMsg }) => {
// 调用失败
});