在一个项目中我们使用了apache httpclient,使用时没有任何异常。但问题是,我们无法在远程 http-server 或其他任何地方找到文件。
我们在网上读到应该安装 jakarta 文件上传,我们这样做了,但现在我们被卡住了。因为没有文件上传到服务器或者我们找不到它们。
有人吗?
public class HttpServerHandler {
/**
* A generic method to execute any type of Http Request and constructs a response object
* @param requestBase the request that needs to be exeuted
* @return server response as <code>String</code>
*/
private static String executeRequest(HttpRequestBase requestBase){
String responseString = "" ;
InputStream responseStream = null ;
HttpClient client = new DefaultHttpClient () ;
try{
HttpResponse response = client.execute(requestBase);
// get response of the server
if (response != null){
HttpEntity responseEntity = response.getEntity() ;
if (responseEntity != null){
responseStream = responseEntity.getContent();
if (responseStream != null){
BufferedReader br = new BufferedReader (new InputStreamReader (responseStream)) ;
String responseLine = br.readLine() ;
String tempResponseString = "" ;
while (responseLine != null){
tempResponseString = tempResponseString + responseLine + System.getProperty("line.separator") ;
responseLine = br.readLine() ;
}
br.close() ;
if (tempResponseString.length() > 0){
responseString = tempResponseString ;
}
}
}
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
if (responseStream != null){
try {
responseStream.close() ;
} catch (IOException e) {
e.printStackTrace();
}
}
}
client.getConnectionManager().shutdown() ;
return responseString ;
}
/**
* Method that builds the multi-part form data request
* @param urlString the urlString to which the file needs to be uploaded
* @param file the actual file instance that needs to be uploaded
* @param fileName name of the file, just to show how to add the usual form parameters
* @param fileDescription some description for the file, just to show how to add the usual form parameters
* @return server response as <code>String</code>
*/
public String executeMultiPartRequest(String urlString, File file, String fileName, String fileDescription) {
HttpPost postRequest = new HttpPost (urlString) ;
try{
MultipartEntity multiPartEntity = new MultipartEntity () ;
//The usual form parameters can be added this way
multiPartEntity.addPart("fileDescription", new StringBody(fileDescription != null ? fileDescription : "")) ;
multiPartEntity.addPart("fileName", new StringBody(fileName != null ? fileName : file.getName())) ;
/*Need to construct a FileBody with the file that needs to be attached and specify the mime type of the file. Add the fileBody to the request as an another part.
This part will be considered as file part and the rest of them as usual form-data parts*/
FileBody fileBody = new FileBody(file, "application/octect-stream") ;
multiPartEntity.addPart("attachment", fileBody) ;
postRequest.setEntity(multiPartEntity) ;
}catch (UnsupportedEncodingException ex){
ex.printStackTrace() ;
}
return executeRequest (postRequest);
}
}
这是将文件上传到 http 服务器的代码。文件通过表单上传并传递给这个类?当我们尝试上传它时,我们会收到一个状态码 301 响应。
我们真正想做的是通过apache的httpclient将文件上传到远程httpserver