inline / try to force download on file view

This commit is contained in:
Lars Hoogestraat 2019-02-04 18:15:30 +01:00
parent 361f98917f
commit e5b4baba24
6 changed files with 18 additions and 8 deletions

View File

@ -110,6 +110,7 @@ func InitTables(db *sql.DB) error {
"unique_name VARCHAR(191) NOT NULL, " +
"size BIGINT NOT NULL, " +
"content_type VARCHAR(150) NOT NULL, " +
"inline boolean NOT NULL DEFAULT false, " +
"last_modified datetime NOT NULL, " +
"user_id INT NOT NULL, " +
"CONSTRAINT `fk_file_user` " +

View File

@ -117,6 +117,8 @@ func AdminUploadFilePostHandler(ctx *middleware.AppContext, w http.ResponseWrite
}
}
file.Inline = convertCheckbox(r, "admin")
_, err = ctx.FileService.Upload(file)
if err != nil {

View File

@ -25,6 +25,7 @@ type File struct {
FullFilename string `json:"full_name"`
Link string `json:"link"`
ContentType string `json:"content_type"`
Inline bool `json:"inline"`
Size int64 `json:"size"`
LastModified time.Time `json:"last_modified"`
Data []byte `json:"-"`

View File

@ -18,7 +18,7 @@ func (rdb SQLiteFileDatasource) GetByUniqueName(uniqueName string, u *User) (*Fi
var args []interface{}
stmt.WriteString("SELECT f.id, f.filename, f.unique_name, f.content_type, f.size, f.last_modified, f.user_id, ")
stmt.WriteString("SELECT f.id, f.filename, f.unique_name, f.content_type, ,f.inline, f.size, f.last_modified, f.user_id, ")
stmt.WriteString("u.display_name, u.username, u.email, u.is_admin ")
stmt.WriteString("FROM file as f ")
stmt.WriteString("INNER JOIN user as u ")
@ -37,7 +37,7 @@ func (rdb SQLiteFileDatasource) GetByUniqueName(uniqueName string, u *User) (*Fi
var f File
var ru User
if err := rdb.SQLConn.QueryRow(stmt.String(), args...).Scan(&f.ID, &f.FullFilename, &f.UniqueName, &f.ContentType, &f.Size, &f.LastModified, &ru.ID,
if err := rdb.SQLConn.QueryRow(stmt.String(), args...).Scan(&f.ID, &f.FullFilename, &f.UniqueName, &f.ContentType, &f.Inline, &f.Size, &f.LastModified, &ru.ID,
&ru.DisplayName, &ru.Username, &ru.Email, &ru.IsAdmin); err != nil {
return nil, err
}
@ -54,7 +54,7 @@ func (rdb SQLiteFileDatasource) Get(fileID int, u *User) (*File, error) {
var args []interface{}
stmt.WriteString("SELECT f.id, f.filename, f.unique_name, f.content_type, f.size, f.last_modified, f.user_id, ")
stmt.WriteString("SELECT f.id, f.filename, f.unique_name, f.content_type, f.inline, f.size, f.last_modified, f.user_id, ")
stmt.WriteString("u.display_name, u.username, u.email, u.is_admin ")
stmt.WriteString("FROM file as f ")
stmt.WriteString("INNER JOIN user as u ")
@ -73,7 +73,7 @@ func (rdb SQLiteFileDatasource) Get(fileID int, u *User) (*File, error) {
var f File
var ru User
if err := rdb.SQLConn.QueryRow(stmt.String(), args...).Scan(&f.ID, &f.FullFilename, &f.UniqueName, &f.ContentType, &f.Size, &f.LastModified, &ru.ID,
if err := rdb.SQLConn.QueryRow(stmt.String(), args...).Scan(&f.ID, &f.FullFilename, &f.UniqueName, &f.ContentType, &f.Inline, &f.Size, &f.LastModified, &ru.ID,
&ru.DisplayName, &ru.Username, &ru.Email, &ru.IsAdmin); err != nil {
return nil, err
}
@ -85,8 +85,8 @@ func (rdb SQLiteFileDatasource) Get(fileID int, u *User) (*File, error) {
//Create inserts some file meta information into the database
func (rdb SQLiteFileDatasource) Create(f *File) (int, error) {
res, err := rdb.SQLConn.Exec("INSERT INTO file (filename, unique_name, content_type, size, last_modified, user_id) VALUES(?, ?, ?, ?, ?, ?)",
f.FullFilename, f.UniqueName, f.ContentType, f.Size, time.Now(), f.Author.ID)
res, err := rdb.SQLConn.Exec("INSERT INTO file (filename, unique_name, content_type, inline, size, last_modified, user_id) VALUES(?, ?, ?, ?, ?, ?, ?)",
f.FullFilename, f.UniqueName, f.ContentType, f.Inline, f.Size, time.Now(), f.Author.ID)
if err != nil {
return -1, err
@ -108,7 +108,7 @@ func (rdb SQLiteFileDatasource) List(u *User, p *Pagination) ([]File, error) {
var args []interface{}
stmt.WriteString("SELECT f.id, f.filename, f.unique_name, f.content_type, f.size, f.last_modified, ")
stmt.WriteString("SELECT f.id, f.filename, f.unique_name, f.content_type, f.Inline, f.size, f.last_modified, ")
stmt.WriteString("u.id, u.display_name, u.username, u.email, u.is_admin ")
stmt.WriteString("FROM file as f ")
stmt.WriteString("INNER JOIN user as u ")
@ -142,7 +142,7 @@ func (rdb SQLiteFileDatasource) List(u *User, p *Pagination) ([]File, error) {
var us User
for rows.Next() {
if err = rows.Scan(&f.ID, &f.FullFilename, &f.UniqueName, &f.ContentType, &f.Size, &f.LastModified, &us.ID, &us.DisplayName,
if err = rows.Scan(&f.ID, &f.FullFilename, &f.UniqueName, &f.ContentType, &f.Inline, &f.Size, &f.LastModified, &us.ID, &us.DisplayName,
&us.Username, &us.Email, &u.IsAdmin); err != nil {
return nil, err
}

View File

@ -10,6 +10,10 @@
<form enctype="multipart/form-data" action="/admin/file/upload" method="post">
<label for="file">File</label>
<input type="file" id="file" name="file" placeholder="Choose a file" required>
<div class="checkbox">
<label><input type="checkbox" id="inline" name="inline" value="on"{{if .Inline}} checked{{end}}>Inline?</label>
</div>
{{ .csrfField }}

View File

@ -15,6 +15,7 @@
<th>Last modified</th>
<th>Link</th>
<th>ContentType</th>
<th>Inline</th>
<th>Size</th>
<th>User</th>
<th>Actions</th>
@ -27,6 +28,7 @@
<td>{{.LastModified | FormatDateTime}}</td>
<td>{{ApplicationURL}}/file/{{.UniqueName}}</td>
<td>{{.ContentType}}</td>
<td>{{.Inline}}</td>
<td>{{.Size}}</td>
<td>{{.Author.Username}}</td>
<td class="action-data">