playframework上传下载
来源:互联网 发布:日理万机的网络意思 编辑:程序博客网 时间:2024/06/10 05:38
web项目中经常要用到上传和下载文件,最常见的就是用户上传头像更改头像。也有时会上传一些资料供用户下载!
Play默认将上传的文件存储到应用的data/attachments/目录下
如果需要将文件保存到其他目录,可以在conf/application.conf文件中指定路径,可以是绝对路径,也可以是Play应用目录的相对路径:
attachments.path=photos
一、不获取文件名称的上传:
1、首先,在应用中定义UserPhoto模型,该模型用于存储上传文件:UserPhoto.java
package models;import javax.persistence.Column;import javax.persistence.Entity;import javax.persistence.Table;import play.db.jpa.Blob;import play.db.jpa.Model;/** * 2017年9月26日20:07:35 * 该模型用于存储上传文件 * */@Entitypublic class UserPhoto extends Model {@Column(name="photo")public Blob photo;@Column(name="photoName")public String photoName;public UserPhoto() {super();}public UserPhoto(Blob photo, String photoName) {super();this.photo = photo;this.photoName = photoName;}public Blob getPhoto() {return photo;}public void setPhoto(Blob photo) {this.photo = photo;}public String getPhotoName() {return photoName;}public void setPhotoName(String photoName) {this.photoName = photoName;}}
2、在视图文件中添加上传文件的表单:index.html:
#{extends 'main.html' /}#{set title:'Home' /}<h1>上传图片</h1>#{form @uploadPhoto(), enctype:'multipart/form-data'} <input type="file" name="userphoto.photo"> <input type="submit" name="submit" value="上传">#{/form}
3、控制器中添加相应的Action方法:Application.java:
//上传图片或修改图片public static void uploadPhoto(UserPhoto userphoto) {userphoto.save();seeAllPhoto();}
到此上传文件就已经完成了!
下面看整体代码:
UserPhoto模型同上面的UserPhoto.java一样
上传文件的界面index.html同上面的index.html一样
控制器Application.java:
package controllers;import play.*;import play.mvc.*;import java.util.*;import org.h2.engine.User;import models.*;/** * 2017年9月26日20:15:35 * 用于对图片增删改查的控制器 * */public class Application extends Controller {public static void index() {render();}//上传图片或修改图片public static void uploadPhoto(UserPhoto userphoto) {userphoto.save();seeAllPhoto();}//查看所有图片public static void seeAllPhoto(){render();}//加载模型并返回上传的图片public static void userPhoto(long id) { final UserPhoto user = UserPhoto.findById(id); notFoundIfNull(user); response.setContentTypeIfNotSet(user.photo.type()); renderBinary(user.photo.get());}//删除图片public static void deletePhoto(long delid) {//删除上传到服务器的文件final UserPhoto user = UserPhoto.findById(delid);user.photo.getFile().delete();//删除数据库里面的记录,这条语句并不能删除已经上传到服务器上面的文件UserPhoto.delete("delete from UserPhoto where id=?", delid);seeAllPhoto();}//跳往修改图片的界面public static void updatePhotoPage(long updateid){renderArgs.put("updateid", updateid);render();}}
修改图片界面 updatePhotoPage.java:
#{extends 'main.html' /}#{set title:'Home' /}<h1>更新图片</h1>#{form @uploadPhoto(), enctype:'multipart/form-data'} <input type="file" name="userphoto.photo"> <input type="hidden" name="userphoto.id" value="${updateid}"> <input type="submit" name="submit" value="上传">#{/form}
查看所有图片的界面 seeAllPhoto.java:
#{extends 'main.html' /}#{set title:'Home' /}<table border="1" style="width: 50%"> <tr> <th>ID</th> <th>照片</th> <th>照片</th> </tr> #{list items:models.UserPhoto.findAll(), as:'user'} <tr> <td>${user.id}</td> <td><img src="@{userPhoto(user.id)}" style="width: 100px;height: 80px"></td> <td><a href="/Application/updatePhotoPage?updateid=${user.id}">更新</a>|<a href="/Application/deletePhoto?delid=${user.id}">删除</a></td> </tr> #{/list}</table>
显示效果:
二、获取文件名称的上传:
根据一中的代码:
只需要修改Application.java里面的uploadPhoto方法:
//上传图片或修改图片public static void uploadPhoto(File photo,UserPhoto userphoto) throws FileNotFoundException {userphoto.photoFileName = photo.getName();userphoto.photo = new Blob();userphoto.photo.set(new FileInputStream(photo), MimeTypes.getContentType(photo.getName()));userphoto.save();seeAllPhoto();}
修改上传界面index.html:
#{extends 'main.html' /}#{set title:'Home' /}<h1>上传图片</h1>#{form @uploadPhoto(), enctype:'multipart/form-data'} <input type="file" name="photo"> <input type="submit" name="submit" value="上传">#{/form}
修改更新界面updatePhotoPage.html:
#{extends 'main.html' /}#{set title:'Home' /}<h1>更新图片</h1>#{form @uploadPhoto(), enctype:'multipart/form-data'} <input type="file" name="photo"> <input type="hidden" name="userphoto.id" value="${updateid}"> <input type="submit" name="submit" value="上传">#{/form}
修改实体类UserPhoto.java:
/** * 2017年9月26日20:07:35 * 该模型用于存储上传文件 * */@Entitypublic class UserPhoto extends Model {@Column(name="photo")public Blob photo;@Column(name="photoFileName")public String photoFileName;}
显示图片界面:
三、下载文件:
1、在控制器Application.java中添加方法:
//下载文件public static void downloadUserPhoto(long id) { final UserPhoto user = UserPhoto.findById(id); notFoundIfNull(user); response.setContentTypeIfNotSet(user.photo.type()); renderBinary(user.photo.get(), user.photoFileName);}
2、在显示所有文件的界面seeAllPhoto.html中添加一个链接:
#{extends 'main.html' /}#{set title:'Home' /}<table border="1" style="width: 50%"> <tr> <th>ID</th> <th>照片</th> <th>名称</th> <th>操作<th> </tr> #{list items:models.UserPhoto.findAll(), as:'user'} <tr> <td>${user.id}</td> <td>${user.photoFileName}</td> <td><img title="${user.photoFileName}" src="@{userPhoto(user.id)}" style="width: 100px;height: 80px"></td> <td> <a href="/Application/updatePhotoPage?updateid=${user.id}">更新</a>| <a href="/Application/deletePhoto?delid=${user.id}">删除</a>| <a href="@{downloadUserPhoto(user.id)}">下载</a> </td> </tr> #{/list}</table>
效果图:
可以在conf/application.conf配置文件中添加自定义类型。比如,增加以xcf为扩展名的GIMP图片的MIME类型:
mimetype.xcf=application/x-gimp-image
参考:http://www.playframework.cn/wiki/%E6%96%87%E4%BB%B6%E4%B8%8A%E4%BC%A0
阅读全文
0 0
- playframework上传下载
- PlayFramework
- playframework
- playframework
- playframework简介
- PlayFramework入门教程
- java playframework
- 什么是playframework?
- playframework--控制器
- Playframework常用命令
- PlayFramework安装
- 上传下载
- 上传下载
- 上传下载
- 上传下载
- 上传下载
- 上传下载
- 上传下载
- JavaSE基础01
- 杂志投稿费用
- C语言开发过程中的一些积累
- 修改Idea默认的全局设置,如Maven等---------------很重要
- java开发优化之字符串分割
- playframework上传下载
- Java面向对象和三大特性
- 2感知机
- python毫秒级延时
- 关于input后添加图标和文字
- Android中如何修改json里某个字段的值.
- 如何让nginx修改Response HTTP Header中的server的值
- 将十进制数(int类型或者float类型)转化为二进制数
- URL