playframework上传下载
2017-09-27 16:28
246 查看
web项目中经常要用到上传和下载文件,最常见的就是用户上传头像更改头像。也有时会上传一些资料供用户下载!
Play默认将上传的文件存储到应用的data/attachments/目录下
如果需要将文件保存到其他目录,可以在conf/application.conf文件中指定路径,可以是绝对路径,也可以是Play应用目录的相对路径:
3、控制器中添加相应的Action方法:Application.java:
到此上传文件就已经完成了!
UserPhoto模型同上面的UserPhoto.java一样
显示效果:
显示图片界面:
2、在显示所有文件的界面seeAllPhoto.html中添加一个链接:
效果图:
可以在conf/application.conf配置文件中添加自定义类型。比如,增加以xcf为扩展名的GIMP图片的MIME类型:
参考:http://www.playframework.cn/wiki/%E6%96%87%E4%BB%B6%E4%B8%8A%E4%BC%A0
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 * 该模型用于存储上传文件 * */ @Entity public 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 * 该模型用于存储上传文件 * */ @Entity public 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
相关文章推荐
- asp.net中fckeditor上传下载配置
- 公告:请避开高峰期下载和上传
- Jsp/Servlet:实现文件上传与下载
- 【jUploader】1.0正在版 基于jQuery文件无刷新上传插件下载及介绍
- 使用SecureCRT上传和下载文件
- .Net 对文件传输协议(FTP)操作(上传,下载,新建,删除,FTP间传送文件等)
- Java实现远程HDFS的文件操作(新建、上传、下载、删除)
- libcurl 库的ftp上传和下载代码
- 用C#上传下载文件
- 文件上传和下载
- c++ 实现 http 上传和下载
- Qt---QFtp上传、下载二进制文件
- jspSmartUpload上传下载全攻略
- 上传下载加载的哲学思考
- 【ARM-LInux开发】利用scp 远程上传下载文件/文件夹
- 用jsch.jar实现SFTP上传下载删除
- python实现的简单FTP上传下载文件实例
- 定时执行Linux shell脚本实现SFTP定时上传下载文件
- Spring MVC+ajaxfileupload实现文件上传下载
- jspSmartUpload上传下载全攻略!