gpt4 book ai didi

java - Google App Engine - Blobstore 请求用于生产而不是开发

转载 作者:行者123 更新时间:2023-12-02 07:56:38 25 4
gpt4 key购买 nike

我正在使用 Google 应用引擎开发上传表单来上传 csv 文件。我当前遇到的问题是,在开发环境中,请求操作要正确发送。

在生产环境中,请求操作似乎有效,尽管两种表单的操作相同。

例如

开发

   action="http://localhost:8080/_ah/upload/ag50cy1zY2gtcmVwb3J0c3IbCxIVX19CbG9iVXBsb2FkU2Vzc2lvbl9fGAEM"

生产 Action :

    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/*

我希望有一个简单的解释(可能是)为什么代码在生产中有效但在开发中无效。

任何帮助都会有很大帮助。

最佳答案

我目前也在与 Blobstore 进行斗争。

我注意到你说:web.xml 已设置为处理请求:/_ah/upload/、/upload/、/_ah/upload/upload/*

但请注意,在 blobstore 处理添加 blob 的请求之后(通过发布到您获得的 URL createUploadUrl("/upload") ),然后它将调用映射到 web.xml 中“/upload”的您的方法。因此,您肯定要删除对/_ah/upload/的任何 web.xml 引用,因为这就是 blobstore 将拦截的内容。

我这样做了一段时间,并收到服务器错误 500,并且没有任何日志记录。

关于java - Google App Engine - Blobstore 请求用于生产而不是开发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9539778/

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