gpt4 book ai didi

java - 如何在java中将远程文件上传到POST URL?

转载 作者:行者123 更新时间:2023-11-30 04:11:28 31 4
gpt4 key购买 nike

我需要使用 POST 或其他选项将 zip 文件上传到 URL。我按照下面的方法成功上传了文件。

String diskFilePath="/tmp/test.zip;
String urlStr="https://<ip>/nfc/file.zip";

HttpsURLConnection conn = (HttpsURLConnection) new URL(urlStr).openConnection();
conn.setDoOutput(true);
conn.setUseCaches(false);
conn.setChunkedStreamingMode(CHUCK_LEN);
conn.setRequestMethod(put? "PUT" : "POST"); // Use a post method to write the file.
conn.setRequestProperty("Connection", "Keep-Alive");
conn.setRequestProperty("Content-Length", Long.toString(new File(diskFilePath).length()));

int i=0;
while(i<1)
{
continue;
}

BufferedOutputStream bos = new BufferedOutputStream(conn.getOutputStream());

BufferedInputStream diskis = new BufferedInputStream(new FileInputStream(diskFilePath));
int bytesAvailable = diskis.available();
int bufferSize = Math.min(bytesAvailable, CHUCK_LEN);
byte[] buffer = new byte[bufferSize];

long totalBytesWritten = 0;
while (true)
{
int bytesRead = diskis.read(buffer, 0, bufferSize);
if (bytesRead == -1)
{
//System.out.println("Total bytes written: " + totalBytesWritten);
break;
}

totalBytesWritten += bytesRead;
bos.write(buffer, 0, bufferSize);
bos.flush();
// System.out.println("Total bytes written: " + totalBytesWritten);
int progressPercent = (int) (((bytesAlreadyWritten + totalBytesWritten) * 100) / totalBytes);

}

现在我的 zip 文件位于远程位置,我需要上传 zip 文件而不下载到本地计算机。

我需要传递此网址“https:///file/test.zip”而不是“/tmp/test.zip”

例如,我在机器 A 上执行程序,要上传的文件存在于机器 B 中。Web 服务器部署在机器 B 中,并公开 url 以下载 zip 文件。现在我需要传递此 ZIP 文件 URL 位置进行上传,而不是将 zip 文件下载到机器 A,然后传递到上传 URL。

谢谢,卡莱

最佳答案

不是 100% 你所说的“不下载到本地机器”。

以下是如何避免将文件下载到临时本地文件然后上传的方法。基本方法是从一个 URLConnection(而不是本地文件)读取并写入另一个 URLConnection(就像您已经做的那样)。首先向 sourceString 发出请求,所以

HttpsURLConnection source = (HttpsURLConnection) new URL("https://machine.B/path/to/file.zip").openConnection();

然后保留所有内容,直到设置 Content-Length并将其替换为

conn.setRequestProperty("Content-Length", source.getContentLength());

然后你所要做的就是使用

InputStream is = source.getInputStream();

而不是你的diskis

PS:我不明白 .available 的目的逻辑上,为什么不直接使用 CHUNK_LEN 作为缓冲区大小?PPS:也是while(i<0)循环可以被删除;-)

关于java - 如何在java中将远程文件上传到POST URL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19509813/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com