我一直试图使用我的应用程序在谷歌云存储上上传一个pdf文件,但我无法做到。我在网上搜索了一下,找到了下面的代码,但问题是这个代码在上传txt文件时很有用,但在上传pdf文件时不有用。当我尝试上传pdf文件时,它上传成功,但当我尝试打开它时,它没有打开。我正在使用以下代码:
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
RequestDispatcher rd=req.getRequestDispatcher("career-registration-successfull.jsp");
RequestDispatcher rd1=req.getRequestDispatcher("career-registration-failed.jsp");
String name="";
String email="";
long whatsapp=0;
long number=0;
String query="";
int flag1=0;
int flag2=0;
isMultipart = ServletFileUpload.isMultipartContent(req);
resp.setContentType("text/html");
java.io.PrintWriter out = resp.getWriter( );
FileInputStream fileInputStream = new FileInputStream("C:\Users\Subhanshu Bigasia\Desktop\Amazon.pdf");
Storage storage = StorageOptions.getDefaultInstance().getService();
Bucket bucket=storage.get(("combucket1eduvitae7"));
ServletFileUpload sfu = new ServletFileUpload(new DiskFileItemFactory());
String targetFileStr="";
try {
List<FileItem> fileName = sfu.parseRequest(req);
for(FileItem f:fileName)
{
try {
f.write (new File("C:\Users\Subhanshu Bigasia\Desktop\Afcat.pdf"));
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//targetFileStr = readFile("/Users/tkmajdt/Documents/workspace/File1POC1/" + f.getName(),Charset.defaultCharset());
targetFileStr = new String(Files.readAllBytes(Paths.get("C:\Users\Subhanshu Bigasia\Desktop\Afcat.pdf")));
}
}
catch(Exception e) {
e.printStackTrace();
}
BlobId blobId = BlobId.of("combucket1eduvitae", "my_blob_name1");
//Blob blob = bucket.create("my_blob_name1", targetFileStr.getBytes(), "text/plain");
Blob blob=bucket.create("myblob",fileInputStream, "text");
有人能帮忙解决这个问题吗
提前感谢
我使用以下代码解决了问题:
String name="";
String email="";
long whatsapp=0;
long number=0;
String query="";
int flag1=0;
int flag2=0;
boolean isMultipart = ServletFileUpload.isMultipartContent(req);
resp.setContentType("text/html");
java.io.PrintWriter out = resp.getWriter( );
if( !isMultipart ) {
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet upload</title>");
out.println("</head>");
out.println("<body>");
out.println("<p>No file uploaded</p>");
out.println("</body>");
out.println("</html>");
return;
}
DiskFileItemFactory factory = new DiskFileItemFactory();
// maximum size that will be stored in memory
factory.setSizeThreshold(maxMemSize);
// Create a new file upload handler
ServletFileUpload upload = new ServletFileUpload(factory);
// maximum file size to be uploaded.
upload.setSizeMax( maxFileSize );
try {
// Parse the request to get file items.
List fileItems = upload.parseRequest(req);
// Process the uploaded file items
Iterator i = fileItems.iterator();
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet upload</title>");
out.println("</head>");
out.println("<body>");
while ( i.hasNext () ) {
FileItem fi = (FileItem)i.next();
if ( !fi.isFormField () ) {
// Get the uploaded file parameters
try { String fieldName = fi.getFieldName();
String fileName = fi.getName();
String contentType = fi.getContentType();
boolean isInMemory = fi.isInMemory();
long sizeInBytes = fi.getSize();
Date date=new Date();
System.out.println(("Uploaded Filename: " + fileName + "<br>"));
flag1=1;
File f1=new File("C:\Users\Subhanshu Bigasia\Desktop\amazon2.pdf");
FileInputStream fileInputStream = (FileInputStream) fi.getInputStream();
Storage storage = StorageOptions.getDefaultInstance().getService();
Bucket bucket=storage.get(("combucket1eduvitae7"));
ServletFileUpload sfu = new ServletFileUpload(new DiskFileItemFactory());
BlobId blobId = BlobId.of("combucket1eduvitae", "my_blob_name1");
//Blob blob = bucket.create("my_blob_name1", targetFileStr.getBytes(), "application/pdf");
Blob blob=bucket.create(fileName+" "+date.toString(),fileInputStream,"application/pdf");
flag1=1;
}
catch(Exception e) {
flag1=0;
e.printStackTrace();
}
}
请注意,我使用了
Blob Blob=bucket.create(fileName+"+date.toString((,fileInputStream,"application/pdf"(;而不是
Blob Blob=bucket.create(fileName+"+date.toString((,fileInputStream,"text/plain"(;
首先学习Java云存储客户端库文档,该文档将帮助您入门。
然后,您可以尝试使用Java将文件上传到云存储桶的示例(在此处找到(:
/**
* Uploads data to an object in a bucket.
*
* @param name the name of the destination object.
* @param contentType the MIME type of the data.
* @param file the file to upload.
* @param bucketName the name of the bucket to create the object in.
*/
public static void uploadFile(
String name, String contentType, File file, String bucketName)
throws IOException, GeneralSecurityException {
InputStreamContent contentStream = new InputStreamContent(
contentType, new FileInputStream(file));
// Setting the length improves upload performance
contentStream.setLength(file.length());
StorageObject objectMetadata = new StorageObject()
// Set the destination object name
.setName(name)
// Set the access control list to publicly read-only
.setAcl(Arrays.asList(
new ObjectAccessControl().setEntity("allUsers").setRole("READER")));
// Do the insert
Storage client = StorageFactory.getService();
Storage.Objects.Insert insertRequest = client.objects().insert(
bucketName, objectMetadata, contentStream);
insertRequest.execute();
}
你可以在GitHub存储库中找到简单易懂的入门教程。请看一下Stack Overflow线程将图像上传到Google Cloud Storage(Java(。