package com.dounine.clouddisk360.parser; import com.dounine.clouddisk360.annotation.Dependency; import com.dounine.clouddisk360.annotation.Parse; import com.dounine.clouddisk360.parser.deserializer.file.download.upaddress.FileUploadAddress; import com.dounine.clouddisk360.parser.deserializer.file.upload.*; import com.dounine.clouddisk360.parser.deserializer.login.LoginUserToken; import com.dounine.clouddisk360.pool.PoolingHttpClientConnection; import org.apache.http.Consts; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.ContentType; import org.apache.http.entity.mime.HttpMultipartMode; import org.apache.http.entity.mime.MultipartEntityBuilder; import org.apache.http.entity.mime.content.StringBody; import org.apache.http.impl.client.HttpClients; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.IOException; @Parse("文件上传") @Dependency(depends = { FileUploadAddressParser.class }) public class FileUploadParser extends BaseParser<HttpPost, FileUpload, FileUploadConst, FileUploadParameter, FileUploadRequestInterceptor, FileUploadResponseHandle, FileUploadParser> { private static final Logger LOGGER = LoggerFactory.getLogger(FileUploadParser.class); public FileUploadParser(final LoginUserToken loginUser) { super(loginUser); } public FileUploadParser() { super(); } public HttpPost initRequest(final FileUploadParameter parameter) { final FileUploadAddress fileUploadAddress = getDependResult(FileUploadAddress.class); final HttpPost request = new HttpPost("http://" + fileUploadAddress.getData().getUp() + CONST.URI_PATH); final MultipartEntityBuilder multipartEntity = MultipartEntityBuilder.create(); multipartEntity.setCharset(Consts.UTF_8); multipartEntity.setMode(HttpMultipartMode.BROWSER_COMPATIBLE); multipartEntity.addPart(CONST.QID_NAME, new StringBody(getLoginInfo().getQid(), ContentType.DEFAULT_BINARY)); multipartEntity.addPart("ofmt", new StringBody("json", ContentType.DEFAULT_BINARY)); multipartEntity.addPart("method", new StringBody("Upload.web", ContentType.DEFAULT_BINARY)); multipartEntity.addPart("token", new StringBody(readCookieStoreValue("token"), ContentType.DEFAULT_BINARY)); multipartEntity.addPart("v", new StringBody("1.0.1", ContentType.DEFAULT_BINARY)); multipartEntity.addPart("tk", new StringBody(fileUploadAddress.getData().getTk(), ContentType.DEFAULT_BINARY)); multipartEntity.addPart("Upload", new StringBody("Submit Query", ContentType.DEFAULT_BINARY)); multipartEntity.addPart("devtype", new StringBody("web", ContentType.DEFAULT_BINARY)); multipartEntity.addPart("pid", new StringBody("ajax", ContentType.DEFAULT_BINARY)); multipartEntity.addPart("Filename", new StringBody(parameter.getUploadFile().getName(), ContentType.APPLICATION_JSON)); multipartEntity.addPart("path", new StringBody(parameter.getPath(), ContentType.APPLICATION_JSON));// 解决中文不识别问题 multipartEntity.addBinaryBody("file", parameter.getUploadFile()); request.setEntity(multipartEntity.build()); return request; } @Override public FileUpload execute(final HttpPost request) { if(hasException()){ return execClouddiskException(); } httpClient = HttpClients.custom().setConnectionManager(PoolingHttpClientConnection.getInstalce()).build(); try { return httpClient.execute(request, responseHandler, this.httpClientContext); } catch (IOException e) { LOGGER.error("Error",e); executeException(e,request); } return null; } }