【发布时间】:2015-04-02 05:15:14
【问题描述】:
我正在为我的项目创建一个音频文件上传系统。在这种情况下,我使用的是 angularjs 应用程序,我也使用了 html。我已经使用谷歌应用引擎编写了我的应用程序的后端。在这种情况下,我发现的问题是我遵循了 google blobstore api,并使用 jsp 页面进行了文件上传。但我想通过 html 页面来完成它。问题是jsp中有一个java代码调用blobstore api中的createUploadUrl方法。但在 html 页面中,我无法做到这一点。我尝试使用 angularjs 以下列方式做到这一点。
<div class="container">
<h1>Audio Upload</h1>
<form method="post" enctype="multipart/form-data">
<input type="text" name="foo" ng-model="audio.foo"/>
<input type="file" name="myFile" ng-model="audio.myFile"/>
<input type="submit" value="Submit" ng-click="upload(audio)"/>
</form>
</div>
这是html页面的代码。
以下是html页面的控制器。
function AudioUpload( $http,$filter, $timeout, $scope, $location, $rootScope) {
console.log("=========================");
console.log("Audio Upload Controller...");
$scope.upload = function(audio) {
$('.line-loader').show();
$http({
url : '/upload',
method : "POST",
//data : $.param(audio),
headers : {
'Content-Type' : 'audio/mp3; charset=UTF-8'
}
}).success(function(data) {
console.log(audio.myFile+"Audio Successfully Uploaded...")
})
}
}
这里是用来完成这项任务的 servlet
服务 Servlet
package xxx.xxxx.fileupload;
import java.io.IOException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.google.appengine.api.blobstore.BlobKey;
import com.google.appengine.api.blobstore.BlobstoreService;
import com.google.appengine.api.blobstore.BlobstoreServiceFactory;
public class Serve extends HttpServlet {
private BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService();
@Override
public void doGet(HttpServletRequest req, HttpServletResponse res)
throws IOException {
BlobKey blobKey = new BlobKey(req.getParameter("blob-key"));
blobstoreService.serve(blobKey, res);
}
}
上传 Servlet
package xxx.xxxxx.fileupload;
import java.io.IOException;
import java.util.List;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.google.appengine.api.blobstore.BlobKey;
import com.google.appengine.api.blobstore.BlobstoreService;
import com.google.appengine.api.blobstore.BlobstoreServiceFactory;
public class Upload extends HttpServlet {
private BlobstoreService blobstoreService = BlobstoreServiceFactory
.getBlobstoreService();
@Override
public void doPost(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
Map<String, List<BlobKey>> blobs = blobstoreService.getUploads(req);
List<BlobKey> blobKeys = blobs.get("myFile");
if (blobKeys == null || blobKeys.isEmpty()) {
res.sendRedirect("/");
} else {
res.sendRedirect("/serve?blob-key="
+ blobKeys.get(0).getKeyString());
}
}
}
我需要使用 html 页面上传文件,这是 index.jsp 页面中的代码,可以很好地与这些 servlet 配合使用。
Index.jsp
<%@ page import="com.google.appengine.api.blobstore.BlobstoreServiceFactory" %>
<%@ page import="com.google.appengine.api.blobstore.BlobstoreService" %>
<%
BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService();
%>
<html>
<head>
<meta http-equiv="Content-Type" content="audio/mp3; charset=ISO-8859-1">
<title>Upload Test</title>
</head>
<body>
<form action="<%= blobstoreService.createUploadUrl("/upload1") %>" method="post" enctype="multipart/form-data">
<input type="text" name="foo">
<input type="file" name="myFile">
<input type="submit" value="Submit">
</form>
</body>
</html>
谁能帮我在不使用jsp的情况下使用angularjs和html完成我的代码。谢谢。
【问题讨论】:
标签: html angularjs servlets blobstore