我想上傳使用Java URL
類的文件,並且我發現堆棧溢出中的previous question這很好地解釋了細節,所以我試着按照它進行操作。以下是我的代碼,採用answer中給出的sniplet。使用Java URL類將數據寫入服務器是否需要服務器響應?
我的問題是,如果我不作出的connection.getResponseCode()
一個或connection.getInputStream()
或connection.getResponseMessage()
或任何其從服務器到REPONSE相關的呼叫,請求將永遠不會被髮送到服務器。爲什麼我需要這樣做?或者有什麼方法可以在沒有得到響應的情況下寫入數據?
P.S.我開發了一個服務器端上傳servlet,它接受multipart/form-data
並使用FileUpload
將它保存到文件中。它是穩定的,毫無問題地工作,所以這不是我的問題產生的地方。
import java.io.Closeable;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import org.apache.commons.io.IOUtils;
public class URLUploader {
public static void closeQuietly(Closeable... objs) {
for (Closeable closeable : objs) {
IOUtils.closeQuietly(closeable);
}
}
public static void main(String[] args) throws IOException {
File textFile = new File("D:\\file.zip");
String boundary = Long.toHexString(System.currentTimeMillis()); // Just generate some unique random value.
HttpURLConnection connection = (HttpURLConnection) new URL("http://localhost:8080/upslet/upload").openConnection();
connection.setDoOutput(true);
connection.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary);
OutputStream output = connection.getOutputStream();
PrintWriter writer = new PrintWriter(output, true);
// Send text file.
writer.println("--" + boundary);
writer.println("Content-Disposition: form-data; name=\"file1\"; filename=\"" + textFile.getName() + "\"");
writer.println("Content-Type: application/octet-stream");
FileInputStream fin = new FileInputStream(textFile);
writer.println();
IOUtils.copy(fin, output);
writer.println();
// End of multipart/form-data.
writer.println("--" + boundary + "--");
output.flush();
closeQuietly(fin, writer, output);
// Above request will never be sent if .getInputStream() or .getResponseCode() or .getResponseMessage() does not get called.
connection.getResponseCode();
}
}
謝謝你挑選那個。我已糾正它。但是,編譯失敗並沒有錯。它只是重複。 – gigadot 2012-02-08 22:11:04