小程序端
selectFile: function(e) {
wx.chooseMessageFile({
count: 1,
type: 'all',
success: function(res) {
console.log(res.tempFiles[0].path)
wx.uploadFile({
url: 'http://XXX/upload',
filePath: res.tempFiles[0].path,
name: res.tempFiles[0].name,
success: function(res) {
console.log('文件上传成功');
},
fail: function(res) {
console.log('文件上传失败');
}
})
//uploadFile(res);
},
fail: function(res) {
console.log('文件选择失败');
}
})
},
服务器端
List<FileItem> items = upload.parseRequest(request);
for (FileItem item : items) {
if (!item.isFormField()) {
String fileName = item.getName();
System.out.println(fileName);
}
}
打印出来的结果如上图所示为44位哈希串
经过一番排查,发现wx.uploadFile 在上传文件时,会将文件名用 SHA1 算法哈希成一个固定长度的字符串,作为上传的文件名。
在小程序端口分别输出
console.log(res.tempFiles[0].path)
console.log(res.tempFiles[0].name)
得到以下结果
http://tmp/yMcHn23aHhw9bbbbddcab057917886cd7f099e3f8d26.txt
a.txt
解决方法
把服务端的 item.getName(); 替换为 item.getFieldName()
System.out.println(item.getFieldName());
System.out.println(item.getName());
C++核心编程.md
nx6rfcds1vBy2b255ca63ac9cb24f971858e893b29b2.md
a.txt
yMcHn23aHhw9bbbbddcab057917886cd7f099e3f8d26.txt