如何使用Java将文件上传到HTTP远程服务器?

7
我需要使用Java将应用程序中的图像和txt文件上传到远程服务器(仅限http,无ftp)。我的应用程序是在JSF框架下开发的。我进行了搜索但没有找到合适的内容。 有人可以指导我吗? 实际上,我应该将文件上传到远程服务器的特定文件夹中。 我有两个具有共享路径的应用程序来上传文件,因此为了访问它们,我决定将共享文件(如图像和文本)上传到第三个服务器。第一个应用程序应将文件上传到此远程服务器,而第二个应用程序应从中读取它们。 因此,这个解决方案的难点是使用http将文件上传到这个第三方服务器(实际上是远程服务器)。

每个建议使用commons fileupload发送文件的人都是错误的。它旨在在另一端解析multipart/form-data请求,而不是在您的端创建和发送multipart/form-data请求。 - BalusC
1
也许问题应该更明确一些。不要期望在这样模糊的问题下得到准确的答案! - Alexis Dufrenoy
我有两个应用程序,它们共享上传文件的路径,因此为了访问这些文件,我决定将共享文件(如图像和文本)上传到第三方服务器。第一个应用程序应该将文件上传到这个远程服务器,而第二个应用程序应该从中读取它们。因此,这个解决方案的难点是使用HTTP将文件上传到这个第三方服务器(实际上是远程服务器)。 - zorro6064
首先请考虑以下几点:
  1. 您的“第三个服务器”上是否正在运行http服务器?
  2. 您是否能够在该处上传自定义代码?
如果第一个问题的答案是肯定的,那么下面提供的答案将会起作用。 否则,您需要先安装Tomcat、GlassFish或其他某种http服务器,然后开始操作。
- rt.jar
6个回答

6

远程服务器上的特定文件夹。我的应用程序运行在我的服务器上,文件托管不在我的应用程序运行的位置。 - zorro6064
就像我之前所说的那样,远程服务器/文件主机必须提供API以通过HTTP上传时指定远程目标。 - gigadot

3

2
请使用以下代码:
        byte[] data = bos.toByteArray();//convert ur file into byte[]
        HttpClient httpClient = new DefaultHttpClient();//Client
        HttpPost postRequest = new HttpPost(YOUR_SERVER_URL);//Post Request to specified URL
        ByteArrayBody bab = new ByteArrayBody(data, "a.txt");
        MultipartEntity reqEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);// Multipart data
        reqEntity.addPart("uploadingFile", bab); //adding data to request entity
        postRequest.setEntity(reqEntity);//adding request entity to post request
        HttpResponse response = httpClient.execute(postRequest); 

我应该在哪里添加我的远程服务器URL?在你的代码中,“a.txt”是什么?你能为我解释更多吗? - zorro6064
请在YOUR_SERVER_URL中添加您的服务器网址... a.txt是我发送到服务器的文件。 - P Srinivas Goud
我使用了你的代码,但是没有任何动作并且没有抛出异常。你能指导我吗?我没有改变你上面的代码。谢谢。 - zorro6064

0

您可以使用 HttpClient。

使用 POST 方法发送文件。


0
根据您的要求,您需要发送多个图像和文本文件。因此,HTTP多部分文件上传似乎是一个合适的解决方案。您可以从这里获取更多信息。

-4

制作

@Autowired
ServletContext c;

或者获取对象

byte[] bytes = file.getBytes();

String UPLOAD_FOLDEdR=c.getRealPath("/images");  
Path path = Paths.get(UPLOAD_FOLDEdR +"/"+ file.getOriginalFilename());
Files.write(path, bytes);
System.out.println(path);
String Pic_Name =file.getOriginalFilename();

1
能否请您编辑您的答案使其更加通顺易懂?目前代码难以阅读,也不太清楚它如何解决所提出的问题。请更好地解释您的答案。 - melwil

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接