【发布时间】:2016-05-31 23:14:43
【问题描述】:
我正在尝试让用户可以将图标从网络浏览器拖到他们的桌面,并创建一个文本文件。我已经把内容部分记下来了,但我不知道如何设置文件名。我试过改变dataTransfer.files,但那是只读的。我不确定如何实现这一点。
class CrashReport extends React.Component {
dragStart(event) {
const dat = {name: 'test!', crashDate: new Date()};
event.dataTransfer.name = 'tmp.txt'; // bad
event.dataTransfer.setData('text/plain', JSON.stringify(dat, null, 2));
console.log(event.dataTransfer);
}
render() {
return <div draggable onDragStart={this.dragStart.bind(this)}>
Drag This
</div>
}
}
【问题讨论】:
-
“我已经把内容部分写下来了”你能创建一个 stacksn-ps 或 plnkr plnkr.co 来演示吗?
-
@guest271314 上面的代码正是这样做的(拖放到桌面,创建一个文件)。我将添加一个 Plunker 链接。
-
在plnkr这里没有通过拖拽到桌面来创建文件,只有在将plnkr的元素拖到文件管理器时才会创建文件的链接;见stackoverflow.com/questions/5416748/…。虽然使用这种方法stackoverflow.com/questions/29343897/…,但您可以通过设置
.innerHTML来设置文件名的链接,例如拖动到文件管理器的<a>元素。 -
您是否考虑过使用 put_file_contents 或 fwrite & fopen ?您可以用 PHP 编写脚本并使用 AJAX 调用它,因为 javascript 与本地或服务器文件无关(它不是服务器端友好的)
-
@TheBumpaster 这听起来像是服务器端代码。
标签: javascript reactjs