我正在開發使用Dropbox API的Jersey服務。如何將通用文件發送至球衣服務並正確接收?
我需要發佈一個通用文件到我的服務(該服務將能夠管理每種文件以及您可以使用Dropbox API)。
客戶端
所以,我已經實現了一個簡單的客戶端:
- 打開文件,
- 創建到URL的連接,
- 設置正確的HTTP方法,
- 創建一個
FileInputStream
並使用字節緩衝區將文件寫入連接的輸出流。
這是客戶端測試代碼。
public class Client {
public static void main(String args[]) throws IOException, InterruptedException {
String target = "http://localhost:8080/DCService/REST/professor/upload";
URL putUrl = new URL(target);
HttpURLConnection connection = (HttpURLConnection) putUrl.openConnection();
connection.setDoOutput(true);
connection.setInstanceFollowRedirects(false);
connection.setRequestMethod("POST");
connection.setRequestProperty("content-Type", "application/pdf");
OutputStream os = connection.getOutputStream();
InputStream is = new FileInputStream("welcome.pdf");
byte buf[] = new byte[1024];
int len;
int lung = 0;
while ((len = is.read(buf)) > 0) {
System.out.print(len);
lung += len;
is.read(buf);
os.write(buf, 0, len);
}
}
}
服務器端
我有一個方法:
- 獲得一個
InputStream
作爲參數, - 創建一個與原始的相同名稱和類型的文件文件。
以下代碼實現了一個用於接收特定PDF文件的測試方法。
@PUT
@Path("/upload")
@Consumes("application/pdf")
public Response uploadMaterial(InputStream is) throws IOException {
String name = "info";
String type = "exerc";
String description = "not defined";
Integer c = 10;
Integer p = 131;
File f = null;
try {
f = new File("welcome.pdf");
OutputStream out = new FileOutputStream(f);
byte buf[] = new byte[1024];
int len;
while ((len = is.read(buf)) > 0)
out.write(buf, 0, len);
out.close();
is.close();
System.out.println("\nFile is created........");
} catch (IOException e) {
throw new WebApplicationException(Response.Status.BAD_REQUEST);
}
//I need to pass a java.io.file object to this method
professorManager.uploadMaterial(name, type, description, c,p, f);
return Response.ok("<result>File " + name + " was uploaded</result>").build();
}
此實現僅適用於文本文件。如果我嘗試發送簡單PDF,則收到的文件不可讀(在將它保存到磁盤後)。
我該如何滿足我的要求?任何人都可以提出解決方案
你能發佈你的客戶端和服務器代碼嗎?沒有這一點,很難說出什麼問題。 – 2012-01-09 06:35:07
感謝您的迴應。我添加了一些代碼。 – pierus 2012-01-09 10:15:42