我知道我可以使用multipart / form POST请求一次将1个文件上传到AppEngine. AppEngine也支持uploading multiple files,但你必须做一些运行的JSP东西才能工作.

我有一个应用程序,要求我上传一些表单数据,2个图像和3个文本字段.这可以通过AppEngine完成吗?我一直在努力寻找有关这方面的信息,但这很难解决我需要的灵活性.我将把数据存储在blob存储/数据存储中.

我需要一个Java解决方案.

这是我的POST方法的签名:

import javax.ws.rs.Consumes;

import javax.ws.rs.POST;

@POST

@Consumes(MediaType.MULTIPART_FORM_DATA)

public void post(

@Context HttpServletRequest request,

@Context HttpServletResponse response)

throws FileUploadException, IOException {}

如果确实需要,可以复制和粘贴Java Servlet.以上是问题和相关的servlet片段.

import java.io.BufferedReader;

import java.io.IOException;

import java.nio.ByteBuffer;

import java.nio.channels.Channels;

import java.util.Iterator;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.ws.rs.Consumes;

import javax.ws.rs.POST;

import javax.ws.rs.Path;

import javax.ws.rs.core.Context;

import javax.ws.rs.core.MediaType;

import org.apache.commons.fileupload.FileItemHeaders;

import org.apache.commons.fileupload.FileItemIterator;

import org.apache.commons.fileupload.FileItemStream;

import org.apache.commons.fileupload.FileUploadException;

import org.apache.commons.fileupload.servlet.ServletFileUpload;

import com.google.appengine.api.blobstore.BlobstoreService;

import com.google.appengine.api.blobstore.BlobstoreServiceFactory;

import com.google.appengine.api.files.AppEngineFile;

import com.google.appengine.api.files.FileReadChannel;

import com.google.appengine.api.files.FileService;

import com.google.appengine.api.files.FileServiceFactory;

import com.google.appengine.api.files.FileWriteChannel;

@Path("/upload")

public class FileUploadServlet {

private BlobstoreService blobstoreService = BlobstoreServiceFactory

.getBlobstoreService();

@POST

@Consumes(MediaType.MULTIPART_FORM_DATA)

public void post(@Context HttpServletRequest request,

@Context HttpServletResponse response) throws FileUploadException,

IOException {

final ServletFileUpload upload = new ServletFileUpload();

final FileItemIterator fileIter = upload.getItemIterator(request);

while (fileIter.hasNext()) {

final FileItemStream item = fileIter.next();

String name = item.getName();

String fieldName = item.getFieldName();

String contentType = item.getContentType();

Log.d("Name = " + name);

Log.d("Field-Name = " + fieldName);

Log.d("Content-Type = " + contentType);

FileItemHeaders headers = item.getHeaders();

if(headers != null) {

Iterator it = (Iterator)headers.getHeaderNames();

while(it.hasNext()) {

String h = it.next();

Log.d(h + " = " + headers.getHeader(h));

}

}

if (item.isFormField()) {

// Nothing

} else {

RawImageData data = new RawImageData();

data.load(item.openStream());

// RawImageData reads the stream and stores it into a large byte[] called data.imageData

ByteBuffer bb = ByteBuffer.wrap(data.imageData);

FileService fs = FileServiceFactory.getFileService();

AppEngineFile file = fs.createNewBlobFile(contentType);

FileWriteChannel write = fs.openWriteChannel(file, true);

write.write(bb);

write.closeFinally();

String path = file.getFullPath();

Log.d(path);

// Later, read from the file using the file API

boolean lock = false; // Let other people read at the same time

FileReadChannel readChannel = fs.openReadChannel(file,

false);

// CRASHES WITH java.nio.charset.IllegalCharsetNameException: image/jpeg

// contentType = "image/jpeg"

// Again, different standard Java ways of reading from the

// channel.

BufferedReader reader = new BufferedReader(Channels.newReader(readChannel, contentType));

readChannel.close();

}

}

response.setContentType("text/html");

response.getOutputStream().write("success".getBytes());

}

}

完全例外:

WARNING: /api/upload

java.nio.charset.IllegalCharsetNameException: image/jpeg

at java.nio.charset.Charset.checkName(Charset.java:284)

at java.nio.charset.Charset.lookup2(Charset.java:458)

at java.nio.charset.Charset.lookup(Charset.java:437)

at java.nio.charset.Charset.forName(Charset.java:502)

at java.nio.channels.Channels.newReader(Channels.java:381)

at com.futonredemption.starstarstar.FileUploadServlet.post(FileUploadServlet.java:96)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

blah blah blah

android两个java文件内容_java – 在1个请求中将多个文件从Android上传...相关推荐

  1. java 按行读取大文件文件内容_Java实现按行读取大文件

    Java实现按行读取大文件 String file = "F:" + File.separator + "a.txt"; FileInputStream fis ...

  2. java 读取大文件内容_java读取大文件

    java一般读取文件时,将文件文内容全部加在到内存,然后读取,但是这种读取方式很明显不适合读取大文件,在进行大文件处理时,考虑到内存有限,采用分次读取的方式. java分次读取文件内容有三种方式, 1 ...

  3. Linux 文件管理-文件内容-读取工具-【cattac】连接多个文件并打印到标准输出

    cat === 连接多个文件并打印到标准输出. 概要 cat [OPTION]... [FILE]... 主要用途 显示文件内容,如果没有文件或文件为-则读取标准输入. 将多个文件的内容进行连接并打印 ...

  4. word表格导出html代码,(网页源代码中的表格数据怎么导出excel)如何将把从WORD、EXCEL中复制的内容转换成HTML源代码,再通过网页表单提交上传到数据库?...

    如何将ASP页面中的表格生成一个Excel表,求源码 '给你个例子吧.保存为 asp文件看看.具体就在第一句. New Page 1PJ计画 第版 案件No 案件名 主门 顾客 PJ责任者 営业担当 ...

  5. java 监听文件内容_java 监听文件内容变化

    有时候,我们需要确定某些文件是否有变化而做出一些对应的动作,例如,曾经开发的一款服务器中,由于模块比较多,在运行期间有时候需要单独的输出某个模块日志,但又不可能总是开着日志. log4j中已经实现了可 ...

  6. java ftp读取文件内容_java读取ftp中TXT文件的案例

    最近在开发关于java读取ftp中TXT文件,其中有些坑踩了一下,再次做个记录 1.读取文件时我会根据文件名称去生成数据库表,oracle数据库对于表名的长度是有限制的,最多30个字符 2.对于多个文 ...

  7. java 解析sh文件内容_java 文件读取

    show me she shell 这是一道tomato师傅出的不完整的java题,java-,java-我恨java┑( ̄Д  ̄)┍ 这是一个题目一是列目录+任意文件读取, 二是垂直越权+CLRF配 ...

  8. java读取json文件内容_java读取json文件内容详解

    之前给大家介绍了一下java读取txt文件内容,下面要给大家介绍的就是java读取json文件内容,一起来了解一下吧. 1.java读取json文件 下面是具体的思路: 首先是获取文件-获取文件内容- ...

  9. java读取修改文件内容_Java对本地文件内容读取、修改、删除的操作

    import org.apache.commons.lang.StringUtils; import java.io.*; import java.util.HashMap; import java. ...

最新文章

  1. Squid的refresh_pattern配置
  2. 麻省理工学院开放 2018 自动驾驶课程
  3. 宠粉福利,100G网盘最新架构技术资料合集限时领
  4. 数据结构:最大子序列和
  5. Python 【第八章】:JavaScript 、Dom、jQuery
  6. netty检测系统工具PlatformDependent
  7. vue 页面A转到页面B,B页面停留在A页面的滚动位置
  8. Acwing第 33 场周赛【完结】
  9. QtGraphicView添加图元
  10. 更优雅的在 Xunit 中使用依赖注入
  11. PHP项目中,记录错误日志
  12. angularjs 元素重复指定次数_[LeetCode] 442. 数组中重复的数据
  13. Java数组数字排列
  14. cocos之观察者模式应用实例
  15. 成员变量与局部变量的区别
  16. 【项目】ARX程序开发:框裁直线(Rect Trim Line)功能开发
  17. python的wget用法介绍_Python使用wget实现下载网络文件功能示例
  18. 送起来oracle,十一,送你 51 个 Oracle 常用语句~
  19. 能力风暴机器人编程 | 详解使用能力风暴机器人以及配套VJC 4.3 CH做一个物联网——智慧物流项目
  20. 威漫哨兵机器人_漫威:哨兵机器人天下无敌?这几位变种人就不把他们放在眼里...

热门文章

  1. java自定义线程池池,线程池使用及自定义线程池
  2. 超清世界地图可放大_3D高清世界地图
  3. 湖南工业大学在线计算机作业答案,湖南工业大学《计算机组成原理》试题集,共7份,有部分答案...
  4. ruby宝石区块链最新消息_Ruby宝石| Ruby工具
  5. c++中std::find_std :: find()与C ++中的示例
  6. long类型20位示例_Java Long类numberOfTrailingZeros()方法及示例
  7. Java ObjectInputStream registerValidation()方法与示例
  8. Redis 管道技术——Pipeline
  9. 十五、Python操作mysql数据库
  10. html5 java 图片上传_java实现图片上传至服务器并显示,如何做?希望要具体的代码实现...