This commit is contained in:
zhouhao
2018-10-11 18:58:12 +08:00
parent 5e2f7952dd
commit ac09bbef94
2 changed files with 41 additions and 17 deletions

View File

@@ -0,0 +1,32 @@
package org.hswebframework.web.service.file;
import com.alibaba.fastjson.JSON;
import org.hswebframework.web.tests.SimpleWebApplicationTests;
import org.junit.Assert;
import org.junit.Test;
import org.springframework.http.MediaType;
import org.springframework.mock.web.MockMultipartFile;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
/**
* fix bug #93 test
*
* @author zhouhao
* @since 3.0.2
*/
public class FixBug93Test extends SimpleWebApplicationTests {
@Test
public void testUploadFile() throws Exception {
String result = mvc.perform(
MockMvcRequestBuilders
.fileUpload("/file/upload")
.file(new MockMultipartFile("file", "test中文.txt", MediaType.TEXT_PLAIN_VALUE, "test".getBytes()))
).andReturn()
.getResponse()
.getContentAsString();
Assert.assertEquals(JSON.parseObject(result).getJSONObject("result").getString("name"), "test中文.txt");
}
}

View File

@@ -33,6 +33,7 @@ import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
@@ -254,35 +255,26 @@ public class FileController {
@ApiOperation("上传单个文件")
@Authorize(action = "upload", description = "上传文件")
public ResponseMessage<FileInfoEntity> upload(@RequestPart("file") MultipartFile file) {
List<FileInfoEntity> fileInfoList = new LinkedList<>();
Authentication authentication = Authentication.current().orElse(null);
String creator = authentication == null ? null : authentication.getUser().getId();
if (file.isEmpty()) {
return ResponseMessage.ok();
}
String fileName = file.getOriginalFilename();
String contentType = Optional.ofNullable(WebUtil.getHttpServletRequest())
.orElseThrow(UnsupportedOperationException::new)
.getContentType();
ParameterParser parser = new ParameterParser();
Map<String, String> params = parser.parse(contentType, ';');
if (params.get("charset") == null) {
try {
fileName = new String(file.getOriginalFilename().getBytes("ISO-8859-1"), "utf-8");
} catch (@SuppressWarnings("all") UnsupportedEncodingException ignore) {
}
}
if (logger.isInfoEnabled()) {
logger.info("start write file:{}", fileName);
}
// String contentType = Optional.ofNullable(WebUtil.getHttpServletRequest())
// .orElseThrow(UnsupportedOperationException::new)
// .getContentType();
// ParameterParser parser = new ParameterParser();
// Map<String, String> params = parser.parse(contentType, ';');
// if (params.get("charset") == null) {
// fileName = new String(file.getOriginalFilename().getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8);
// }
FileInfoEntity fileInfo;
try {
fileInfo = fileService.saveFile(file.getInputStream(), fileName, file.getContentType(), creator);
} catch (IOException e) {
throw new BusinessException("save file error", e);
}
fileInfoList.add(fileInfo);
return ResponseMessage.ok(fileInfo)
.include(FileInfoEntity.class, FileInfoEntity.id,
FileInfoEntity.name,