修复图片上传保存后图片破损问题

This commit is contained in:
tanghc
2020-04-15 15:58:47 +08:00
parent 7b8899abec
commit 33b9c870bb
4 changed files with 49 additions and 4 deletions

View File

@@ -80,15 +80,16 @@ public class IndexFilter implements WebFilter {
if (request.getMethod() == HttpMethod.POST) { if (request.getMethod() == HttpMethod.POST) {
ServerRequest serverRequest = ServerWebExchangeUtil.createReadBodyRequest(exchange); ServerRequest serverRequest = ServerWebExchangeUtil.createReadBodyRequest(exchange);
// 读取请求体中的内容 // 读取请求体中的内容
Mono<?> modifiedBody = serverRequest.bodyToMono(String.class) Mono<?> modifiedBody = serverRequest.bodyToMono(byte[].class)
.flatMap(body -> { .flatMap(data -> {
String body = new String(data, SopConstants.CHARSET_UTF8);
// 构建ApiParam // 构建ApiParam
ApiParam apiParam = ServerWebExchangeUtil.getApiParam(exchange, body); ApiParam apiParam = ServerWebExchangeUtil.getApiParam(exchange, body);
// 签名验证 // 签名验证
doValidate(exchange, apiParam); doValidate(exchange, apiParam);
return Mono.just(body); return Mono.just(data);
}); });
BodyInserter bodyInserter = BodyInserters.fromPublisher(modifiedBody, (Class) String.class); BodyInserter bodyInserter = BodyInserters.fromPublisher(modifiedBody, (Class)byte[].class);
HttpHeaders headers = new HttpHeaders(); HttpHeaders headers = new HttpHeaders();
headers.putAll(exchange.getRequest().getHeaders()); headers.putAll(exchange.getRequest().getHeaders());

View File

@@ -14,8 +14,10 @@ import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.util.Collection; import java.util.Collection;
import java.util.Optional;
/** /**
* 演示文件上传 * 演示文件上传
@@ -70,6 +72,25 @@ public class FileUploadDemoController {
return result; return result;
} }
@ApiMapping(value = "demo.file.upload3")
public FileUploadResult file3(FileUploadParam2 param, HttpServletRequest request) {
System.out.println(param.getRemark());
FileUploadResult result = new FileUploadResult();
// 获取上传的文件
Collection<MultipartFile> uploadFiles = UploadUtil.getUploadFiles(request);
Optional<MultipartFile> first = uploadFiles.stream().findFirst();
if (first.isPresent()) {
MultipartFile multipartFile = first.get();
try {
String path = System.getProperty("user.dir");
multipartFile.transferTo(new File(path + "/img_"+System.currentTimeMillis()+".png"));
} catch (IOException e) {
e.printStackTrace();
}
}
return result;
}
private FileUploadResult.FileMeta buildFileMeta(MultipartFile multipartFile) { private FileUploadResult.FileMeta buildFileMeta(MultipartFile multipartFile) {
// 文件名 // 文件名
String fileName = multipartFile.getOriginalFilename(); String fileName = multipartFile.getOriginalFilename();

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

View File

@@ -239,6 +239,29 @@ public class AllInOneTest extends TestBase {
client.execute(requestBuilder); client.execute(requestBuilder);
} }
/**
* 演示文件上传
*/
public void testFile3() {
Client client = new Client(url, appId, privateKey);
String root = System.getProperty("user.dir");
Client.RequestBuilder requestBuilder = new Client.RequestBuilder()
.method("demo.file.upload3")
.version("1.0")
.bizContent(new BizContent().add("remark", "test file upload"))
// 添加文件
.addFile("image", new File(root + "/src/main/resources/img.png"))
.callback((requestInfo, responseData) -> {
System.out.println(responseData);
JSONObject jsonObject = JSON.parseObject(responseData);
JSONObject data = jsonObject.getJSONObject(requestInfo.getDataNode());
Assert.assertEquals(data.getString("code"), "10000");
})
;
client.execute(requestBuilder);
}
/** /**
* 下载文件 * 下载文件
*/ */