化石原创文章,转载请注明来源并保留原文链接


突然发现w3school上的这段代码非常不错,因为其他地方的代码多多少少都有点问题,比如drag的时候屏幕闪烁、抓取的位置不对等等。而这里的代码,质量非常高,即取即用。

javascript代码:

dragElement(document.getElementById("element_to_drag"));

function dragElement(elmnt) {
	var pos1 = 0, pos2 = 0, pos3 = 0, pos4 = 0;
	elmnt.onmousedown = dragMouseDown;

	function dragMouseDown(e) {
		e = e || window.event;
		e.preventDefault();
		// get the mouse cursor position at startup:
		pos3 = e.clientX;
		pos4 = e.clientY;
		document.onmouseup = closeDragElement;
		// call a function whenever the cursor moves:
		document.onmousemove = elementDrag;
	}

	function elementDrag(e) {
		e = e || window.event;
		e.preventDefault();
		// calculate the new cursor position:
		pos1 = pos3 - e.clientX;
		pos2 = pos4 - e.clientY;
		pos3 = e.clientX;
		pos4 = e.clientY;
		// set the element's new position:
		elmnt.style.top = (elmnt.offsetTop - pos2) + "px";
		elmnt.style.left = (elmnt.offsetLeft - pos1) + "px";
	}

	function closeDragElement() {
		// stop moving when mouse button is released:
		document.onmouseup = null;
		document.onmousemove = null;
	}
}

使用的时候,只要把第一行代码里的element id改成需要抓取的element id即可。


化石原创文章,转载请注明来源并保留原文链接



化石原创文章,转载请注明来源并保留原文链接


第一次使用百度API,发现了个奇怪的问题。很多应用,比如腾讯的、支付宝的,一般都在后台直接就给出了API访问需要的一系列东西,但是百度的在线API,token却是不是明示出来的。需要通过另外的接口去访问得到,应该是为了让这个token能有时间等的限制,从而更严格的控制客户端。

在百度后台,创建应用后,会得到appid、API Key、Screct Key。而一些在线api,访问的时候提交的却是Access Token。这个Token可以从API Key和Screct Key得到。访问的是一个https的接口:

https://openapi.baidu.com/oauth/2.0/token?grant_type=client_credentials&client_id={}&client_secret={}

这个接口中,client_id后面的{},用API Key替换,client_secret后面的{}用Screct Key替换,然后访问能得到一串json字符串。里面的access_token就是我们要的Access Token。


化石原创文章,转载请注明来源并保留原文链接



化石原创文章,转载请注明来源并保留原文链接


一般上传的时候目录不会直接放在默认的静态资源目录下面。因为这样就绑定了原来的网站内容。

1、实现让上传的图片放置到服务器的其他文件夹,这个在springboot的接收上传的代码中可以通过路径支持到。

package main.controller.admin;

import main.StringHelper;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import java.io.File;
import java.io.IOException;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

@RestController
public class UploadPageController {
    @PostMapping("/upload")
    public String singleFileUpload(@RequestParam("file") MultipartFile file, RedirectAttributes redirectAttributes) {
        if (file.isEmpty()) {
            redirectAttributes.addFlashAttribute("message", "Please select a file to upload");
            return "error";
        }

        try {
            String originalFilename = file.getOriginalFilename();
            int dot = originalFilename.lastIndexOf('.');
            String extension = file.getOriginalFilename().substring(dot + 1);

            LocalDateTime now = LocalDateTime.now();
            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS");
            String destFileName = now.format(formatter) + StringHelper.getAlphaNumericString(8) + "." + extension;
            String filePath = "f:/" + destFileName;
            File dest = new File(filePath);
            file.transferTo(dest);
//            byte[] bytes = file.getBytes();
//            Path path = Paths.get(filePath);
//            Files.write(path, bytes);

            return destFileName;

        } catch (IOException e) {
            e.printStackTrace();
        }

        return "error";
    }
}

上面的这段代码,在接收到图片的时候,把目录定在了f盘的根目录(在windows上开发的时候使用)。

2、springboot配置,让我们的f:/成为静态资源的搜索目录的一部分。这个需要在springboot工程的application.properties中完成。

web.upload-path=f:/
spring.mvc.static-path-pattern=/**
spring.resources.static-locations=classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/,file:${web.upload-path}

上面最后file:${web.upload-path}指定了f:/。其他几个目录其实都是springboot内置的。

3、完成上面两步后,这样我们在上传的时候,就能得到服务器上的该上传图片对应的名称(上面的1中的代码),这样只要改变对应的img的src内容,浏览器就会刷出对应的图片。

4、Linux上,路径不要用~(当前用户目录标识),实际测试的时候发现不能用。用绝对路径吧。


化石原创文章,转载请注明来源并保留原文链接



化石原创文章,转载请注明来源并保留原文链接


msys站点配置文件在它的安装目录的etc\pacman.d下面,有三个文件:

1、mirrorlist.mingw32
2、mirrorlist.mingw64
3、mirrorlist.msys

默认站点在国内相对不是很快。我们可以使用国内的镜像站点来替代,我一般配置中科大和清华的两个国内源,使用下来比较稳定。对应上面的3个文件,配置这两个的代码如下:

1、mirrorlist.mingw32

Server = http://mirrors.ustc.edu.cn/msys2/mingw/i686/
Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/i686/

2、mirrorlist.mingw64

Server = http://mirrors.ustc.edu.cn/msys2/mingw/x86_64/
Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/x86_64/

3、mirrorlist.msys

Server = http://mirrors.ustc.edu.cn/msys2/msys/$arch/
Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/msys/$arch/

即使配置国内源,有时候还是会遇到“Operation too slow. Less than 1 bytes/sec”的错误,导致不能正常下载。这个时候我们一般在pacman的参数中添加

–disable-download-timeout

即可。

比如:

 $ pacman -S --force --noconfirm --needed  --disable-download-timeout xxx

卸载安装的包,不是单纯的从硬盘上删去对应的文件。而是要用命令

pacman -R <package-name>

注意上面的命令中,原来安装的包是什么名字,<package-name>就是什么

完。


化石原创文章,转载请注明来源并保留原文链接



化石原创文章,转载请注明来源并保留原文链接


一阵没弄c++,遇上一个小工具,必须使用c++写,刚写完编译出现连接错误:

error LNK2001:xxx __calloc_dbg

其实还有__free_dbg等字眼。

c++这个东西,的确会比其他语言烦一点。但是熟悉也就好解决。这个问题的原因是代码生成部分没有用到带d(debug)的选项引起的。

VC工程上,右键 | 属性 | 配置属性 | C/C++ | 代码生成 | 运行库,选择自己的项目合适的带d的即可。


化石原创文章,转载请注明来源并保留原文链接