【发布时间】:2012-03-21 08:07:56
【问题描述】:
我正在使用谷歌应用引擎开发上传表单来上传 csv 文件。 我目前遇到的问题是,在开发环境中,请求操作将被正确发送。
在生产环境中,请求操作似乎有效,尽管两种形式的操作相同。
例如
发展
action="http://localhost:8080/_ah/upload/ag50cy1zY2gtcmVwb3J0c3IbCxIVX19CbG9iVXBsb2FkU2Vzc2lvbl9fGAEM"
制作动作:
action="http://website.appspot.com/_ah/upload/AMmfu6Yer2BJaT_tW_fmc- PKvHaOHD3pnv5QH6o6d8XQQujbCWg5egbjf2sGxP5_cN6uAyvgDVOn8U40wLLXEvoQcrMDbHQQByJpTlamzBPz_8x8LN2UWKM/ALBNUaYAAAAAT1EmxMkvj7tiS9WAvYAWKPG1sN1DvmMk/"
当我在日志中进行调查时,开发服务器指出该操作是: "/ag50cy1zY2gtcmVwb3J0c3IbCxIVX19CbG9iVXBsb2FkU2Vzc2lvbl9fGAEM"
如生产日志所述,该操作是: “/form”(如预期的那样)
两者的代码在下面是相同的。
文件:upload.jsp
<%
request.getAttribute("message");
BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService();
%>
<hr/>
<p>Upload a .csv file to the system.</p>
<fieldset>
<legend>Upload File</legend>
<form action="<%= blobstoreService.createUploadUrl("/upload/form") %>" method="post" enctype="multipart/form-data">
<label for="filename_1">File: </label>
<input id="filename_1" type="file" id="filename_1" name="file" size="30" onchange="checkInput();" /><br/>
<br/>
<input type="submit" id="submitBtn" value="Upload File" />
</form>
</fieldset>
文件:controller.java
else if (action.equals("/form")) {
Logger.getLogger(Controller3.class.getName()).log(Level.INFO, action);
Map<String, List<BlobKey>> blobs = blobstoreService.getUploads(request);
List<BlobKey> bkList = blobs.get("filename_1");
BlobKey blobKey = bkList.get(0);
if (blobKey == null) {
Logger.getLogger(Controller3.class.getName()).log(Level.WARNING, "Blob null");
response.sendRedirect("/");
} else {
Logger.getLogger(Controller3.class.getName()).log(Level.WARNING, "Blob not null");
FileService fileService = FileServiceFactory.getFileService();
// Create a new Blob file with mime-type "text/plain"
AppEngineFile file = fileService.getBlobFile(blobKey);// Again, different standard Java ways of reading from the channel.
FileReadChannel readChannel = fileService.openReadChannel(file, false);
Reader reader1 = new BufferedReader(Channels.newReader(readChannel, "UTF8"));
char c = ',';
CSVReader reader = new CSVReader(reader1, c);
ArrayList<ArrayList<String>> results = reader.getResults();
ArrayList<String> columns = reader.getColumns();
request.setAttribute("maxColumns", columns);
request.setAttribute("csvResults", results);
//Remove the CSV file from the blobstore now we have used it.
blobstoreService.delete(blobKey);
this.getServletContext().setAttribute("csvUploadResults", results);
}
已设置 web.xml 来处理请求: /_ah/upload/, /upload/, /_ah/upload/upload/*
我希望有一个简单的解释(可能是)为什么代码在生产中有效但在开发中无效。
任何帮助都会有很大帮助。
【问题讨论】:
标签: java google-app-engine jsp blob blobstore