1
我試圖使用HttpRequest使用JavaFX上傳文件。爲此我寫了下面的函數。JavaFX:由於缺少邊界文件上傳到REST服務/ servlet失敗
function uploadFile(inputFile : File) : Void {
// check file
if (inputFile == null or not(inputFile.exists()) or inputFile.isDirectory()) {
return;
}
def httpRequest : HttpRequest = HttpRequest {
location: urlConverter.encodeURL("{serverUrl}");
source: new FileInputStream(inputFile)
method: HttpRequest.POST
headers: [
HttpHeader {
name: HttpHeader.CONTENT_TYPE
value: "multipart/form-data"
}
]
}
httpRequest.start();
}
在服務器端,我試圖使用Jersey REST服務使用Apache Commons FileUpload API處理傳入數據。用於執行此操作的代碼是Apache主頁上的FileUpload教程的簡單副本。
@Path("Upload")
public class UploadService {
public static final String RC_OK = "OK";
public static final String RC_ERROR = "ERROR";
@POST
@Produces("text/plain")
public String handleFileUpload(@Context HttpServletRequest request) {
if (!ServletFileUpload.isMultipartContent(request)) {
return RC_ERROR;
}
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
List<FileItem> items = null;
try {
items = upload.parseRequest(request);
}
catch (FileUploadException e) {
e.printStackTrace();
return RC_ERROR;
}
...
}
}
不過,我在items = upload.parseRequest(request);
得到一個例外: org.apache.commons.fileupload.FileUploadException:請求被拒絕,因爲沒有多邊界發現
我想我必須添加手動邊界信息到InputStream。有沒有簡單的解決方案來做到這一點?或者還有其他解決方案嗎?
這工作。但它有一些限制。例如。您必須將文件名稱作爲查詢參數傳遞。 – spa 2010-04-22 11:47:44