| @@ -1,6 +1,7 @@ | |||||
| package repo | package repo | ||||
| import ( | import ( | ||||
| "code.gitea.io/gitea/modules/storage" | |||||
| "sort" | "sort" | ||||
| "code.gitea.io/gitea/models" | "code.gitea.io/gitea/models" | ||||
| @@ -8,6 +9,8 @@ import ( | |||||
| "code.gitea.io/gitea/modules/base" | "code.gitea.io/gitea/modules/base" | ||||
| "code.gitea.io/gitea/modules/context" | "code.gitea.io/gitea/modules/context" | ||||
| "code.gitea.io/gitea/modules/log" | "code.gitea.io/gitea/modules/log" | ||||
| gouuid "github.com/satori/go.uuid" | |||||
| ) | ) | ||||
| const ( | const ( | ||||
| @@ -77,6 +80,13 @@ func DatasetIndex(ctx *context.Context) { | |||||
| ctx.Data["dataset"] = dataset | ctx.Data["dataset"] = dataset | ||||
| ctx.Data["Attachments"] = attachments | ctx.Data["Attachments"] = attachments | ||||
| ctx.Data["IsOwner"] = true | 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) | renderAttachmentSettings(ctx) | ||||
| ctx.HTML(200, tplIndex) | ctx.HTML(200, tplIndex) | ||||
| @@ -2,7 +2,7 @@ | |||||
| <div class="field required dataset-files"> | <div class="field required dataset-files"> | ||||
| <label>{{.i18n.Tr "dataset.file"}}</label> | <label>{{.i18n.Tr "dataset.file"}}</label> | ||||
| <div class="files"></div> | <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> | </div> | ||||
| </div> | </div> | ||||
| @@ -305,7 +305,7 @@ function retrieveImageFromClipboardAsBlob(pasteEvent, callback) { | |||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| /* | |||||
| function uploadFile(file, callback) { | function uploadFile(file, callback) { | ||||
| const xhr = new XMLHttpRequest(); | const xhr = new XMLHttpRequest(); | ||||
| @@ -321,37 +321,6 @@ function uploadFile(file, callback) { | |||||
| formData.append('file', file, file.name); | formData.append('file', file, file.name); | ||||
| xhr.send(formData); | 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() { | function reload() { | ||||
| window.location.reload(); | window.location.reload(); | ||||
| @@ -2443,12 +2412,16 @@ $(document).ready(async () => { | |||||
| formData.append('dataset_id', $dataset.data('dataset-id')); | formData.append('dataset_id', $dataset.data('dataset-id')); | ||||
| }); | }); | ||||
| this.on('success', (file, data) => { | this.on('success', (file, data) => { | ||||
| /* | |||||
| filenameDict[file.name] = data.uuid; | filenameDict[file.name] = data.uuid; | ||||
| const input = $(`<input id="${data.uuid}" name="files" type="hidden">`).val(data.uuid); | const input = $(`<input id="${data.uuid}" name="files" type="hidden">`).val(data.uuid); | ||||
| $('.files').append(input); | $('.files').append(input); | ||||
| */ | |||||
| console.log($dataset.data('upload-url')); | |||||
| console.log($dataset.data('uuid')); | |||||
| }); | }); | ||||
| this.on('queuecomplete', () => { | this.on('queuecomplete', () => { | ||||
| window.location.realod(); | |||||
| window.location.reload(); | |||||
| }); | }); | ||||
| this.on('removedfile', (file) => { | this.on('removedfile', (file) => { | ||||
| if (file.name in filenameDict) { | if (file.name in filenameDict) { | ||||