| @@ -1,6 +1,7 @@ | |||
| package repo | |||
| import ( | |||
| "code.gitea.io/gitea/modules/storage" | |||
| "sort" | |||
| "code.gitea.io/gitea/models" | |||
| @@ -8,6 +9,8 @@ import ( | |||
| "code.gitea.io/gitea/modules/base" | |||
| "code.gitea.io/gitea/modules/context" | |||
| "code.gitea.io/gitea/modules/log" | |||
| gouuid "github.com/satori/go.uuid" | |||
| ) | |||
| const ( | |||
| @@ -77,6 +80,13 @@ func DatasetIndex(ctx *context.Context) { | |||
| ctx.Data["dataset"] = dataset | |||
| ctx.Data["Attachments"] = attachments | |||
| ctx.Data["IsOwner"] = true | |||
| uuid := gouuid.NewV4().String() | |||
| url, err := storage.Attachments.PresignedPutURL(models.AttachmentRelativePath(uuid)) | |||
| if err != nil { | |||
| ctx.ServerError("PresignedPutURL", err) | |||
| } | |||
| ctx.Data["uuid"] = uuid | |||
| ctx.Data["url"] = url | |||
| renderAttachmentSettings(ctx) | |||
| ctx.HTML(200, tplIndex) | |||
| @@ -2,7 +2,7 @@ | |||
| <div class="field required dataset-files"> | |||
| <label>{{.i18n.Tr "dataset.file"}}</label> | |||
| <div class="files"></div> | |||
| <div class="ui dropzone" id="dataset" data-upload-url="{{AppSubUrl}}/attachments" data-accepts="{{.AttachmentAllowedTypes}}" data-remove-url="{{AppSubUrl}}/attachments/delete" data-csrf="{{.CsrfToken}}" dataset-id={{.dataset.ID}} data-max-file="100" data-dataset-id="{{.dataset.ID}}" data-max-size="{{.AttachmentMaxSize}}" data-default-message="{{.i18n.Tr "dropzone.default_message"}}" data-invalid-input-type="{{.i18n.Tr "dropzone.invalid_input_type"}}" data-file-too-big="{{.i18n.Tr "dropzone.file_too_big"}}" data-remove-file="{{.i18n.Tr "dropzone.remove_file"}}"> | |||
| <div class="ui dropzone" id="dataset" data-upload-url="{{.url}}" data-uuid="{{.uuid}}" data-accepts="{{.AttachmentAllowedTypes}}" data-remove-url="{{AppSubUrl}}/attachments/delete" data-csrf="{{.CsrfToken}}" dataset-id={{.dataset.ID}} data-max-file="100" data-dataset-id="{{.dataset.ID}}" data-max-size="{{.AttachmentMaxSize}}" data-default-message="{{.i18n.Tr "dropzone.default_message"}}" data-invalid-input-type="{{.i18n.Tr "dropzone.invalid_input_type"}}" data-file-too-big="{{.i18n.Tr "dropzone.file_too_big"}}" data-remove-file="{{.i18n.Tr "dropzone.remove_file"}}"> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| @@ -305,7 +305,7 @@ function retrieveImageFromClipboardAsBlob(pasteEvent, callback) { | |||
| } | |||
| } | |||
| } | |||
| /* | |||
| function uploadFile(file, callback) { | |||
| const xhr = new XMLHttpRequest(); | |||
| @@ -321,37 +321,6 @@ function uploadFile(file, callback) { | |||
| formData.append('file', file, file.name); | |||
| xhr.send(formData); | |||
| } | |||
| */ | |||
| function uploadFile(file, callback) { | |||
| retrieveNewURL(file, url => { | |||
| // 上传文件到服务器 | |||
| uploadFileToS3(file, url) | |||
| }) | |||
| } | |||
| // 发请求到server获取上传URL。 | |||
| function retrieveNewURL(file, cb) { | |||
| $.get(`${AppSubUrl}/attachments/get_pre_url`, (url) => { | |||
| cb(url) | |||
| }) | |||
| } | |||
| // 使用XMLHttpRequest来上传文件到S3。 | |||
| function uploadFileToS3(file, url) { | |||
| var xhr = new XMLHttpRequest () | |||
| xhr.open('PUT', url, true) | |||
| xhr.setRequestHeader('X-Csrf-Token', csrf); | |||
| const formData = new FormData(); | |||
| formData.append('file', file, file.name); | |||
| xhr.send(formData); | |||
| /* | |||
| xhr.send(file) | |||
| xhr.onload = () => { | |||
| if (xhr.status == 200) { | |||
| $('#status').text(`Uploaded ${file.name}.`) | |||
| } | |||
| }*/ | |||
| } | |||
| function reload() { | |||
| window.location.reload(); | |||
| @@ -2443,12 +2412,16 @@ $(document).ready(async () => { | |||
| formData.append('dataset_id', $dataset.data('dataset-id')); | |||
| }); | |||
| this.on('success', (file, data) => { | |||
| /* | |||
| filenameDict[file.name] = data.uuid; | |||
| const input = $(`<input id="${data.uuid}" name="files" type="hidden">`).val(data.uuid); | |||
| $('.files').append(input); | |||
| */ | |||
| console.log($dataset.data('upload-url')); | |||
| console.log($dataset.data('uuid')); | |||
| }); | |||
| this.on('queuecomplete', () => { | |||
| window.location.realod(); | |||
| window.location.reload(); | |||
| }); | |||
| this.on('removedfile', (file) => { | |||
| if (file.name in filenameDict) { | |||