《Play for Java》学习笔记(六)文件上传file upload
一、 Play中标准方法
使用表单form和multipart/form-data
的content-type类型。
1.Form
@form(action = routes.Application.upload, 'enctype -> "multipart/form-data") {
<input type="file" name="picture">
<p><input type="submit"></p>
}
说明: HTTP method for the form have to be POST (not GET)
2. Upload action
@BodyParser.Of(value = BodyParser.Text.class, maxLength = 10 * 1024)
public static Result upload() {
MultipartFormData body = request().body().asMultipartFormData();
FilePart picture = body.getFile("picture");
if (picture != null) {
String fileName = picture.getFilename();
String contentType = picture.getContentType();
File file = picture.getFile();
return ok("File uploaded");
} else {
flash("error", "Missing file");
return redirect(routes.Application.index());
}
}
3. 如果想使用Ajax直接上传文件
public static Result upload() {
File file = request().body().asRaw().asFile();
return ok("File uploaded");
}
说明: 此时不用编译为multipart/form-data类型
二、案例——(项目源码)
1. 为product模型添加picture成员变量
aaarticlea/png;base64,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" alt="" width="377" height="156" />
2. 在details.scala.html中加入代码
@main("Product form") {
<h1>Product form</h1>
@helper.form(action = routes.Products.save(),'enctype -> "multipart/form-data"){ //The HTML form is now multipart
<fieldset>
<legend>Product (@productForm("name").valueOr("New"))</legend>
@helper.inputText(productForm("ean"), '_label -> "EAN", '_help -> "Must be exaclty 13 numbers.")
@helper.inputText(productForm("name"),'_label -> "Name")
@helper.inputText(productForm("date"),'_label -> "Date")
@helper.inputText(productForm("peremptionDate"),'_label -> "Peremption date")
@helper.textarea(productForm("description"), '_label -> "Description")
@helper.inputFile(productForm("picture"), '_label -> "Please choose files") //Our input file HTML element
@if(!productForm("picture").valueOr("").isEmpty()) { //The img HTML tag used to display the picture
<span>
<!-- <img style="position:relative; left:50px;height:80px" src="/picture/@productForm("ean").value"> -->
<img style="position:relative; left:50px;height:80px" src="@routes.Products.picture(productForm("ean").value)"/>
</span>
}
......
}
}
3. 在Products Controller中加入以下代码
public static Result save() {
Form<Product> boundForm = productForm.bindFromRequest(); //Create a Form object from the current request
......
Product product = boundForm.get(); //Bind the Product object from the form
MultipartFormData body = request().body().asMultipartFormData();
//Binds form as a multipart form so we can access submitted file
//Requests picture FilePart
//---this should match the name attribute of the input file in our form ( 就文件上传所在的input的name必须是picture)
MultipartFormData.FilePart part = body.getFile("picture");
if(part != null) {
File picture = part.getFile();
try {
product.picture = Files.toByteArray(picture); //A utility method copies file contents to a byte[]
} catch (IOException e) {
return internalServerError("Error reading file upload");
}
}
......
product.save(); //Save or update our current Product object
flash("success", String.format("Successfully added product %s", product));
return redirect(routes.Products.list(1)); //Redirect to our “view all products” page
}
public static Result picture(String ean) {
final Product product = Product.findByEan(ean);
if(product == null) return notFound();
return ok(product.picture);
}
3. 在routes中加入以下代码
GET /picture/:ean controllers.Products.picture(ean: String)
aaarticlea/png;base64,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" alt="" width="342" height="228" />
参考: http://www.playframework.com/documentation/2.0/JavaFileUpload
《Play for Java》学习笔记(六)文件上传file upload的更多相关文章
- java学习笔记 (6) —— 文件上传
1.新建upload.jsp <%@ page language="java" import="java.util.*" pageEncoding=&qu ...
- SpringMVC:学习笔记(8)——文件上传
SpringMVC--文件上传 说明: 文件上传的途径 文件上传主要有两种方式: 1.使用Apache Commons FileUpload元件. 2.利用Servlet3.0及其更高版本的内置支持. ...
- Django:学习笔记(8)——文件上传
Django:学习笔记(8)——文件上传 文件上传前端处理 本模块使用到的前端Ajax库为Axio,其地址为GitHub官网. 关于文件上传 上传文件就是把客户端的文件发送给服务器端. 在常见情况(不 ...
- Javaweb学习笔记10—文件上传与下载
今天来讲javaweb的第10阶段学习.文件的上传与下载,今天主要说的是这个功能的实现,不用说了,听名字就是外行人也知道肯定很重要啦. 老规矩,首先先用一张思维导图来展现今天的博客内容. ...
- springmvc学习笔记--支持文件上传和阿里云OSS API简介
前言: Web开发中图片上传的功能很常见, 本篇博客来讲述下springmvc如何实现图片上传的功能. 主要讲述依赖包引入, 配置项, 本地存储和云存储方案(阿里云的OSS服务). 铺垫: 文件上传是 ...
- Java精选笔记_文件上传与下载
文件上传与下载 如何实现文件上传 在Web应用中,由于大多数文件的上传都是通过表单的形式提交给服务器的,因此,要想在程序中实现文件上传的功能,首先得创建一个用于提交上传文件的表单页面. 为了使Serv ...
- SpringMVC学习笔记八:文件上传及多个文件上传
SpringMVC实现文件上传需要加入jar包,commons-fileupload-1.3.1.jar,commons-io-2.2.jar 项目目录树: pom.xml加入需要的包 <pro ...
- Struts2学习笔记(十一)——文件上传
1.单文件上传 单文件上传步骤: 1)创建上传jsp页面 文件上传的表单提交方式必须是POST方式,编码类型:enctype="multipart/form-data",默认是 a ...
- go web 第二天 学习笔记之文件上传
package main import ( "crypto/md5" "fmt" "html/template" "io" ...
随机推荐
- 关于Android构建
“IDE都是给小白程序员的,大牛级别的程序员一定是命令行控,终端控,你看大牛都是使用vim,emacs 就一切搞定” 这话说的虽然有些绝对,但是也不无道理,做开发这行要想效率高,自动化还真是缺少不了命 ...
- scala的传名参数
scala如果你想实现像if ,while等类似的控制结构,根本没有值要传入花括号{}直接的代码里.要怎么实现. 比如说,我们要实现一个断言的控制结构,myAssert(), myAssert函数参考 ...
- ASP.NET 2.0 异步页面原理浅析 [1]
与 ASP.NET 1.0 相比,ASP.NET 2.0 的各方面改进可以说是非常巨大的.但就其实现层面来说,最大的增强莫过于提供了对异步页面的支持.通过此机制,编写良好的页面可以将数据库.WebSe ...
- iOS - Swift 面向对象语法
1.面向对象 面向过程:面向过程编成将所要解决的问题按解决问题的步骤进行分析.如果是大问题,就分解成为多个不同的小问题,在程序里叫做划分成不同的模块.每一个解决的步骤可能是一行或者几行代码,也可能是一 ...
- [转载] iptables配置实践
原文: http://wsgzao.github.io/post/iptables/ iptables配置实践 By wsgzao 发表于 2015-07-24 文章目录 1. 前言 2. 更新历史 ...
- 初学CDQ分治-NEU1702
关于CDQ分治,首先需要明白分治的复杂度. T(n) = 2T(n/2)+O(kn), T(n) = O(knlogn) T(n) = 2T(n/2)+O(knlogn), T(n) = O(knlo ...
- Linux的中断 & 中断和异常的区别
参考 http://www.yesky.com/20010813/192117.shtml 结构化程序设计思想认为:程序 = 数据结构 + 算法.数据结构体现了整个系统的构架,所以数据结构通常都是代码 ...
- 高质量JavaScript代码书写基本要点
翻译-高质量JavaScript代码书写基本要点 by zhangxinxu from http://www.zhangxinxu.com本文地址:http://www.zhangxinxu.com/ ...
- C++ Primer 笔记(1)基础中的战斗机 输入输出 对输入不定数据处理
今天打算再重新好好的看一遍C++ Primer这本很经典的书籍,笔记开始: 1.每个C++程序都包含一个或者多个函数,其中必须有一个main,操作系统通过调用main入手运行程序: 2.函数包括:返回 ...
- as的Enter_Frame与Timer
As3中的Timer和Event.EnterFrame是有明显的区别的. Evnet.EnterFrame是定时间隔多少时间出发.如果执行时间比间隔时间长,则会间隔执行时间这么久. 举个例子: Fla ...