Browse Source

Merge pull request #541 from colinin/fix-processed-form-data

fix: form-data data should not be processed
pull/580/head
yx lin 4 years ago
committed by GitHub
parent
commit
07672190d5
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 18
      apps/vue/src/api/oss-management/oss.ts
  2. 1
      apps/vue/src/utils/helper/abpApiHelper.ts
  3. 23
      apps/vue/src/utils/http/abp/abp.ts
  4. 2
      apps/vue/src/utils/http/axios/index.ts
  5. 7
      apps/vue/src/views/account/setting/BaseSetting.vue

18
apps/vue/src/api/oss-management/oss.ts

@ -14,6 +14,7 @@ import { format } from '/@/utils/strings';
import { AxiosResponse } from 'axios';
import { isFunction } from '/@/utils/is';
import { UploadFileParams } from '/#/axios';
import { deepMerge } from '/@/utils';
enum Api {
CreateObject = '/api/oss-management/objects',
@ -162,10 +163,19 @@ export const getContainers = (input: GetOssContainerPagedRequest) => {
});
};
export const createObject = (input: OssObjectCreate) => {
return defAbpHttp.post<OssObject>({
url: Api.CreateObject,
data: input,
export const createObject = (input: OssObjectCreate, file?: Blob) => {
return defAbpHttp.request<OssObject>({
service: 'AbpOssManagement',
controller: 'OssObject',
action: 'CreateAsync',
data: {
Bucket: input.bucket,
Path: input.path,
FileName: input.object,
Overwrite: input.overwrite,
ExpirationTime: input.expirationTime,
File: file,
},
});
};

1
apps/vue/src/utils/helper/abpApiHelper.ts

@ -10,6 +10,7 @@ export enum ParameterBindingSources {
body = 'Body',
path = 'Path',
form = 'Form',
formFile = 'FormFile',
header = 'Header',
custom = 'Custom',
services = 'Services',

23
apps/vue/src/utils/http/abp/abp.ts

@ -13,6 +13,7 @@ import { ListResultDto, PagedResultDto } from '/@/api/model/baseModel';
import { useI18n } from '/@/hooks/web/useI18n';
import { AxiosRequestConfig } from 'axios';
import { RequestOptions, UploadFileParams } from '/#/axios';
import { ContentTypeEnum } from '/@/enums/httpEnum';
const { t } = useI18n();
@ -63,19 +64,35 @@ export class abpRequest {
action: string;
data?: any;
params?: any;
}) {
}, requestOptions?: RequestOptions) {
const abpStore = useAbpStoreWithOut();
const module = this.getModule(options.service, abpStore.apidefinition.modules);
const controller = this.getController(options.controller, module.controllers);
const action = this.getAction(options.action, controller.actions);
const apiVersion = this.getApiVersionInfo(action);
const url = UrlBuilder.generateUrlWithParameters(action, options.params, apiVersion);
let requestData = options.data;
const headers = {};
const formDataParams = action.parameters
.filter(p => [`${ParameterBindingSources.form}`, `${ParameterBindingSources.formFile}`].includes(p.bindingSourceId!));
if (requestData && formDataParams.length > 0) {
headers['Content-Type'] = ContentTypeEnum.FORM_DATA;
const formData = new window.FormData();
formDataParams.forEach(param => {
if (requestData[param.name]) {
formData.append(param.name, requestData[param.name]);
}
})
requestData = formData
}
return defHttp.request<TResult>({
url: url,
method: action?.httpMethod,
data: options.data,
});
data: requestData,
headers: headers,
}, requestOptions);
}
private getModule(remoteService: string, modules: { [key: string]: ModuleApiDescriptionModel }) {

2
apps/vue/src/utils/http/axios/index.ts

@ -95,7 +95,7 @@ const transform: AxiosTransform = {
if (Reflect.has(config, 'data') && config.data && Object.keys(config.data).length > 0) {
config.data = data;
config.params = params;
} else {
} else if (Reflect.has(config, 'headers') && config.headers && config.headers['Content-Type'] !== ContentTypeEnum.FORM_DATA) { // 防止form-data类型数据被清除
// 非GET请求如果没有提供data,则将params视为data
config.data = params;
config.params = undefined;

7
apps/vue/src/views/account/setting/BaseSetting.vue

@ -74,7 +74,7 @@
onMounted(_fetchProfile);
function _fetchProfile() {
getProfile().then((profile) => {
return getProfile().then((profile) => {
setFieldsValue(profile);
});
}
@ -85,7 +85,9 @@
.then((res) => {
const path = encodeURIComponent(res.data.path.substring(0, res.data.path.length - 1));
changeAvatar({ avatarUrl: `${path}/${res.data.name}` }).then(() => {
resolve(res as unknown as void);
_fetchProfile().then(() => {
resolve({} as unknown as void);
}).catch((err) => reject(err));
}).catch((err) => reject(err));
})
.catch((err) => reject(err));
@ -105,6 +107,7 @@
updateProfile(getFieldsValue() as UpdateMyProfile)
.then(() => {
createMessage.success(L('PersonalSettingsSaved'));
_fetchProfile();
})
.finally(() => {
confirmButton.loading = false;

Loading…
Cancel
Save