ZBLOG

func handlerupload(w http.ResponseWriter, r *http.Request) { r.ParseMultipartForm(32

如果你想让上传的文件名由客户端指定而不是服务端获取,你可以通过修改前端代码来实现。在发送文件请求时,客户端可以在请求头中包含自定义的文件名。

前端示例代码(使用JavaScript):

function uploadFile() {
  var fileInput = document.getElementById("fileInput");
  var file = fileInput.files[0];
  var filename = "custom_filename.jpg"; // 自定义文件名

  var formData = new FormData();
  formData.append("file", file, filename);

  fetch("/upload", {
    method: "POST",
    body: formData
  })
    .then(response => response.text())
    .then(data => {
      console.log(data);
    })
    .catch(error => {
      console.error(error);
    });
}

这段代码中,我们将上传的文件与自定义的文件名一起作为FormData的一部分,并通过fetch函数发送POST请求到服务器上的”/upload”路径。

后端处理代码(Go):

func handlerUpload(w http.ResponseWriter, r *http.Request) {
	r.ParseMultipartForm(32 << 20) // 解析 multipart 表单,限制最大文件大小为 32MB

	file, _, err := r.FormFile("file") // 获取上传的文件
	if err != nil {
		http.Error(w, "Fail to receive file", http.StatusBadRequest)
		return
	}
	defer file.Close() // 在函数结束时关闭文件句柄

	filename := r.Header.Get("X-File-Name") // 获取自定义的文件名
	if filename == "" {
		http.Error(w, "No custom filename specified", http.StatusBadRequest)
		return
	}

	dst, err := os.Create(filename) // 在服务器上创建一个与自定义文件名相同的空文件
	if err != nil {
		http.Error(w, "Failed to create file on server", http.StatusInternalServerError)
		return
	}
	defer dst.Close() // 在函数结束时关闭目标文件句柄

	_, err = io.Copy(dst, file) // 将上传的文件内容拷贝到目标文件中
	if err != nil {
		http.Error(w, "Failed to save file on server", http.StatusInternalServerError)
		return
	}

	fmt.Fprintln(w, "Upload successful") // 向客户端返回一个简单的响应消息
}

在这段代码中,我们通过r.Header.Get("X-File-Name")获取请求头中的”X-File-Name”字段作为自定义的文件名。

请注意,在修改代码时要确保前后端保持一致,并进行必要的安全性和错误处理。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=12391

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?