【问题标题】:Download file from url [duplicate]从网址下载文件[重复]
【发布时间】:2015-08-01 19:30:20
【问题描述】:

我想向 cron 选项卡添加一个调度作业,这就像带有 url 的 GET 请求。我在我的 restful 应用程序中为该端点编写了以下代码,以从给定的 URL 执行一些 xml 文件的下载。我发现它需要用户交互才能从弹出框中选择保存或打开。我希望在没有来自 cron 调度程序的任何用户交互的情况下自动完成这项工作。

import java.io.File;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.ResponseBuilder;

@Path("/metadata-management")
public class FileService {

private static final String FILE_PATH = "c:\\file.log";

@GET
@Path("/get")
@Produces("text/plain")
public Response getFile() {

    File file = new File(FILE_PATH);

    ResponseBuilder response = Response.ok((Object) file);
    response.header("Content-Disposition",
        "attachment; filename=\"file_from_server.log\"");
    return response.build();

}

}

我应该只使用 HttpURLConnection 从 HTTP URL 下载文件,而不是在上述代码块中下载文件并返回 null 以进行响应吗?

【问题讨论】:

  • 我应该如何编写我的代码?我推荐你一个键盘...
  • 您的问题太宽泛 - 可能的答案太多,或者对于这种格式来说,好的答案太长了。请添加详细信息以缩小答案范围或隔离可以在几段中回答的问题。
  • 谢谢。我在代码中添加了更多上下文。

标签: java rest cron


【解决方案1】:

试试这个:

public static String loadXml(String url) {
     HttpsURLConnection con = (HttpsURLConnection) new URL(url).openConnection();
     System.setProperty("http.agent", "");
     con.setRequestProperty("User-Agent", "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.4; en-US; rv:1.9.2.2) Gecko/20100316 Firefox/3.6.2");
     con.setRequestMethod("GET");
     con.setDoInput(true);
     con.setDoOutput(true);
     ByteArrayOutputStream baos = new ByteArrayOutputStream();
     int n;
     while (( n =con.getInputStream().read())!=-1) {
         baos.write(n);
     };

     con.disconnect();
     return new String(baos.toByteArray(),"UTF-8");
}

【讨论】:

    【解决方案2】:

    使用URL.getInputStream() 方法,您可以根据需要创建一个BufferedReader,并将所有数据读取到一个字符串中。然后,使用BufferedWriter 将其写入文件。使用此代码:

    public void copy(URL source, File destination) throws Exception {
        InputStream stream = source.getInputStream();
        BufferedReader br = new BufferedReader(new InputStreamReader(stream));
        StringBuffer data = new StringBuffer("");
        String line;
        while((line = br.readLine()) != null) {
            data.append(line + System.lineSeparator());
        }
        br.close();
        BufferedWriter bw = new BufferedWriter(new FileWriter(destination));
        bw.write(data.toString());
        bw.close();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-25
      • 2017-03-13
      • 2016-04-01
      • 1970-01-01
      • 2017-04-27
      • 2012-02-02
      • 1970-01-01
      • 2018-11-20
      相关资源
      最近更新 更多