uni-app中上传图片报"statusCode": 400, "errMsg": "uploadFile:ok"
uni.chooseImage({
count: 10, //默认9
sourceType: ['album'], //从相册选择
success:(res)=> {
// 创建一个空的 Promises 数组
const uploadPromises = [];
uni.showLoading({
title: '图片上传中'
});
let igmFileList = res.tempFilePaths;
for(let k=0;k<igmFileList.length;k++){
const promise = new Promise((resolve, reject) => {
uni.uploadFile({
url: this.$base.baseUrl + "uploadBannerImg",
formData: {
userName: encodeURIComponent(encodeURIComponent(this.userName)),
orderId: this.orderId,
},
name: 'file',
filePath: igmFileList[k],
success: (res) => {
console.log('Upload success:', res);
resolve(res.data);
},
fail: (error) => {
console.log('Upload failed:', error);
reject(error);
}
});
})
uploadPromises.push(promise);
}
// 使用 Promise.all 等待所有文件上传完成
Promise.all(uploadPromises).then(() => {
uni.hideLoading();
// 所有文件上传完成后执行查询操作
this.getDataList();
}).catch((error) => {
console.log('文件上传失败:', error);
});
}
});
该方法是uni-app从相册中选择图片到上传图片的完整代码。在另外一个项目中是能上传图片的但是在这个项目中就不行了。附上另外一个项目的后端代码
@RequestMapping(value = "/uploadBannerImg", headers = "content-type=multipart/form-data", method = RequestMethod.POST)
public @ResponseBody
String commerceUploadBannerImg(
HttpServletRequest request,
HttpServletResponse response,
@RequestParam("file") MultipartFile[] file,
@RequestParam(value = "userName", required = false) String userName,
@RequestParam(value = "orderId", required = false) String orderId
) {
try {
response.setHeader("Access-Control-Allow-Origin", "*");
response.setContentType("text/html;charset=UTF-8");
for (MultipartFile multipartFile : file) {
HashMap<String, String> attMap = new HashMap<String, String>();
//获取前端上传的文件名称
String fileAllName = multipartFile.getOriginalFilename();
//获取文件名
String fileName = fileAllName.substring(0, fileAllName.lastIndexOf("."));
//取文件后缀
String ext = fileAllName.substring(fileAllName.lastIndexOf(".") + 1);
//取一个随机id给文件重命名使用
String fileNewName = StringTools.getUUID();
//你的接收的文件新的名字
String fileNewPath = fileNewName + "." + ext;
//获取项目的绝对路径
String path = uploadResource.getFile().getPath()+ File.separator + orderId+ File.separator;
//在项目新建一个 你重新生成名称的文件
File fil = new File(path + fileNewPath);
fil.mkdirs();
multipartFile.transferTo(fil);
//创建压缩图片
String filePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + "/restaurant" + "/upload/banner/"+orderId+"/" + fileNewPath;
attMap.put("shopId", shopId);
attMap.put("fileDes", fileName);
attMap.put("filePath", filePath);
attMap.put("fileName", fileNewName);
attMap.put("fileNameOld", fileName);
attMap.put("file_type", ext);
attMap.put("fileMd5", md5);
attMap.put("fileType", ext);
attMap.put("creator", RaStringUtils.decrypt(userName));
service.addOrderImg(attMap);
}
return "ok";
} catch (Exception e) {
e.printStackTrace();
log.error(e.toString());
return "err";
}
}
这个方法在上一个项目中是能用的。如果你粘贴后直接能用就不用向下看了。在这个项目中不能用估计是哪一个配置有问题导致一直报
"data": "http://...:....",
"statusCode": 400,
"errMsg": "uploadFile:ok"
这个错误。一时间又找不了那个配置。不过我不管。
我可是有3年开发经验的程序员呢,什么场面没有见过。我管你这那的

}
这个是修改后的后台代码直接解决问题
@RequestMapping(value="/bannerImg")
public void fileUploadt(
HttpSession session,
HttpServletRequest request, HttpServletResponse response
) throws IOException {
try {
service.uploadBannerImg(request,response);
}catch (Exception e){
log.error(e.toString());
}
}
@Override
public void uploadBannerImg(HttpServletRequest request, HttpServletResponse response) throws IOException {
PrintWriter o = null;
String day = DateUtil.getCurDate();
String savePath = resource.getFile().getPath() + File.separator +"banner"+ File.separator + day ;
String newFile = "";
try {
File file = new File(savePath);
if(!file.exists() && !file.isDirectory()) {
file.mkdirs();
}
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setHeaderEncoding("UTF-8");
List<FileItem> list = upload.parseRequest(request);
HashMap<String,String> bean = new HashMap<>();
for (FileItem item : list) {
if (item.isFormField()) {
String name = item.getFieldName();
String value = item.getString("UTF-8");
value = new String(value.getBytes("iso8859-1"),"UTF-8");
if (name.equals("userName")){
bean.put("userName",value);
}
if (name.equals("orderId")){
bean.put("orderId",value);
}
} else {
item.getString("UTF-8");
String filename = item.getName();
if (filename == null || filename.trim().equals("")) {
continue;
}
String filetype = filename.substring(filename.lastIndexOf(".") + 1);
bean.put("fileType",filetype);
filename = filename.substring(filename.lastIndexOf("\\") + 1);
filename = filename.substring(0,filename.lastIndexOf("."));
bean.put("fileNameOld",filename);
String s = StringTools.getUUID() + "";
filename = s + "." + filetype;
bean.put("fileName",s);
newFile = savePath + File.separator + filename ;
bean.put("filePath", "/upload/restaurant/banner/" + day +"/"+ filename);
InputStream in = item.getInputStream();
FileOutputStream out = new FileOutputStream(newFile);
byte buffer[] = new byte[1024 * 1024];
int len = 0;
while ((len = in.read(buffer)) > 0) {
out.write(buffer, 0, len);
}
in.close();
out.close();
item.delete();
}
}
response.setContentType("text/html;charset=UTF-8");
o = response.getWriter();
if (bean.size()>0){
addOrderBannerImg(bean);
}
o.print("ok");
} catch (Exception e) {
o.print("err");
log.error(e.toString());
} finally {
if(o != null){
o.close();
}
}
}

浙公网安备 33010602011771号